Я создал динамически спиннер на основе этой ссылки:
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);
}
}
Первый счетчик успешно получает данные, а второй и после не может получить данные из таблицы.
Как это исправить?