Динамически Android Spinner - PullRequest
0 голосов
/ 26 декабря 2018

Я создал динамически спиннер на основе этой ссылки:

https://www.androidtutorialpoint.com/basics/dynamically-add-and-remove-views-in-android

Вращатель извлекает данные из таблицы sqlite, здесь моя функция на dbhelper:

//getting all location from database
public List<String> getAllFlock()
{
    List<String> flockList=new ArrayList<>();
    //get readable database
    SQLiteDatabase db=this.getReadableDatabase();
    Cursor cursor=db.rawQuery("SELECT name FROM flock",null);
    if(cursor.moveToFirst())
    {
        do {
            flockList.add(cursor.getString(0));
        }while (cursor.moveToNext());
    }
    //close the cursor
    cursor.close();
    //close the database
    db.close();
    return flockList;
}

и вот мой код активности:

package com.layerfarm.chickin;
import com.layerfarm.setting.DataHelper;
import com.layerfarm.model.FieldAge;
import com.layerfarm.model.FieldHatch;

import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.util.Locale;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.EditText;
import android.support.v7.widget.CardView;
import android.database.Cursor;
import android.widget.LinearLayout;
import android.view.LayoutInflater;
import android.content.Context;
import java.util.ArrayList;
import java.util.List;

public class AddDataActivity extends AppCompatActivity {

private LinearLayout parentLinearLayout,parentLinearLayoutAge ;
private Button saveButton;
private EditText selected_date,
        start_recording_date,
        edTotalBirdHatch,
        inWeek,
        inDays,
        selected_date_age,
        start_recording_date_age,
        edBirdAge;
private Spinner allStrain,
        allLocation,
        allStrainAge,
        allLocationAge,
        spChickin;
private ViewGroup field_age;
private ViewGroup field_hatch;
private ArrayList<FieldAge> ListFieldAge;
private ArrayList<FieldHatch> ListFieldHatch;


private Calendar startDate;
private Calendar endDate;
private Calendar startDateAge;
private Calendar endDateAge;

private TextView activeDateDisplay;
private Calendar activeDate;
static final int DATE_DIALOG_ID = 0;


DataHelper dbHelper;

private String[] chickinmode = {
        "Hatch Date",
        "Age",
};




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_data);

    //to add another layout
    parentLinearLayout =(LinearLayout) 
findViewById(R.id.parent_linear_layout);
    parentLinearLayoutAge =(LinearLayout) 
findViewById(R.id.parent_linear_layout_age);

    //get value from xml
    selected_date = (EditText) findViewById(R.id.selected_date);
    start_recording_date= (EditText) findViewById(R.id.start_recording_date);
    edTotalBirdHatch= (EditText) findViewById(R.id.edTotalBirdHatch);
    inWeek= (EditText) findViewById(R.id.inWeek);
    inDays= (EditText) findViewById(R.id.inDays);
    selected_date_age= (EditText) findViewById(R.id.selected_date_age);
    start_recording_date_age= (EditText) findViewById(R.id.start_recording_date_age);
    edBirdAge= (EditText) findViewById(R.id.edBirdAge);

    //Spinner Strain
    allStrain=(Spinner)findViewById(R.id.spStrain);
    allStrainAge=(Spinner)findViewById(R.id.spStrainAge);

    //Spinner Location
    allLocation=(Spinner)findViewById(R.id.spLocation);
    allLocationAge=(Spinner)findViewById(R.id.spLocationAge);

    //fill spinner with data from table
    loadStrainSpinnerData();
    loadFlockSpinnerData();

    //date for hatchage

    /* get the current date */
    startDate = Calendar.getInstance();
    /* add a click listener to the Edittext   */
    selected_date.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            showDateDialog(selected_date, startDate);
        }
    });

    /* get the current date */
    endDate = Calendar.getInstance();
    /* add a click listener to the button   */
    start_recording_date.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            showDateDialog(start_recording_date, endDate);
        }
    });


    //date for age
    /* get the current date */
    startDateAge = Calendar.getInstance();
    /* add a click listener to the button   */
    selected_date_age.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            showDateDialog(selected_date_age, startDateAge);
        }
    });

    /* get the current date */
    endDateAge = Calendar.getInstance();
    /* add a click listener to the button   */
    start_recording_date_age.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            showDateDialog(start_recording_date_age, endDateAge);
        }
    });

    /* display the current date (this method is below)  */
    updateDisplay(selected_date, startDate);
    updateDisplay(start_recording_date, endDate);
    updateDisplay(selected_date_age, startDateAge);
    updateDisplay(start_recording_date_age, endDateAge);


    //Spinner kind of chickin
    spChickin = (Spinner) findViewById(R.id.chickinMode);
    // inisialiasi Array Adapter dengan memasukkan string array di atas
    final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
            android.R.layout.simple_spinner_item, chickinmode);
    // mengeset Array Adapter tersebut ke Spinner
    spChickin.setAdapter(adapter);

    // mengeset listener untuk mengetahui saat item dipilih
    spChickin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            // memunculkan toast + value Spinner yang dipilih (diambil dari adapter)

            if (adapterView.getSelectedItem().toString() == "Age")
            {
                //Toast.makeText(adapterView.getContext(), adapterView.getSelectedItem().toString(), Toast.LENGTH_LONG).show();
                CardView card_view_hatch = (CardView) findViewById(R.id.card_view_hatch_date);
                card_view_hatch.setVisibility(View.GONE);

                CardView card_view_age = (CardView) findViewById(R.id.card_view_age);
                card_view_age.setVisibility(View.VISIBLE);

                Toast.makeText(AddDataActivity.this, "Selected "+ adapter.getItem(i) +" Mode", Toast.LENGTH_SHORT).show();

            }

            else
            {
                CardView card_view_hatch = (CardView) findViewById(R.id.card_view_hatch_date);
                card_view_hatch.setVisibility(View.VISIBLE);

                CardView card_view_age = (CardView) findViewById(R.id.card_view_age);
                card_view_age.setVisibility(View.GONE);

                Toast.makeText(AddDataActivity.this, "Selected "+ adapter.getItem(i), Toast.LENGTH_SHORT).show();

            }

        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }


    });


}


private void loadStrainSpinnerData(){
    DataHelper db = new DataHelper(getApplicationContext());
    List<String> categories = db.getAllStrain();

    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories);
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    allStrain.setAdapter(dataAdapter);
    allStrainAge.setAdapter(dataAdapter);
}

private void loadFlockSpinnerData(){
    DataHelper db = new DataHelper(getApplicationContext());
    List<String> location = db.getAllFlock();

    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, location);
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    allLocation.setAdapter(dataAdapter);
    allLocationAge.setAdapter(dataAdapter);
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }
    if(id == R.id.action_back){

        //Intent intent = new Intent(this, MainActivity.class);
        //startActivity(intent);
        finish();

        //Toast.makeText(SettingMainActivity.this, "Refresh App", Toast.LENGTH_LONG).show();
    }
    if(id == R.id.action_new){

        return true;
    }
    //loadSetting();
    //updateSetting();
    return super.onOptionsItemSelected(item);
}


public void onAddField(View view) {
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View rowView = inflater.inflate(R.layout.field_hatch, null);
    // Add the new row before the add field button.
    parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount() - 1);

}

public void onAddFieldAge(View view) {
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View rowView = inflater.inflate(R.layout.field_age, null);
    // Add the new row before the add field button.
    parentLinearLayoutAge.addView(rowView, parentLinearLayoutAge.getChildCount() - 1);
}
}

Первый счетчик успешно получает данные, а второй и после не может получить данные из таблицы.

Как это исправить?

...