Ich habe eine funktionierende RecyclerView
, die onCreate
bestückt ist, aber wenn die Auswahl des Spinner geändert wird, wird RecyclerView
nicht aktualisiert. Alles andere innerhalb der RecyclerView
Funktionen einwandfrei. Selbst wenn ich die Auswahl des Spinner manuell ändere, ändert sich die Nummer onCreate
, aber nuronCreate
.Befüllen RecyclerView dynamisch basierend auf Spinner-Eingang
Interessanterweise, wenn der upNavigation
Pfeil oder angeklickt wird, wenn die Back Button geklickt wird, der RecyclerView
auf der aktuellen Auswahl basiert Updates.
Wenn benötigen Sie mehr Informationen, zögern Sie bitte nicht fragen :)
hier onItemSelected
:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()) {
case R.id.categorySpinner:
String name = spinnerCategory.getSelectedItem().toString();
mAdapter.swapCursor(getAllItems(name));
mAdapter.notifyDataSetChanged();
break;
}
}
ItemAdapter
Klasse:
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemHolder> {
private Context mContext;
private Cursor mCursor;
public ItemAdapter(Context context, Cursor cursor) {
this.mContext = context;
this.mCursor = cursor;
}
@Override
public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mContext);
View view = inflater.inflate(R.layout.list_item_items, parent, false);
return new ItemHolder(view);
}
@Override
public void onBindViewHolder(ItemHolder holder, int position) {
if (!mCursor.moveToPosition(position))
return;
String name = mCursor.getString(
mCursor.getColumnIndex(ItemContract.ItemEntry.COLUMN_ITEM_NAME));
long id = mCursor.getLong(
mCursor.getColumnIndex(ItemContract.ItemEntry._ID));
holder.itemName.setText(name);
holder.itemView.setTag(id);
}
@Override
public int getItemCount() {
return mCursor.getCount();
}
public void swapCursor(Cursor newCursor) {
if (mCursor != null) mCursor.close();
mCursor = newCursor;
if (newCursor != null) {
this.notifyDataSetChanged();
}
}
class ItemHolder extends RecyclerView.ViewHolder {
TextView itemName;
public ItemHolder(View itemView) {
super(itemView);
itemName = (TextView) itemView.findViewById(R.id.itemName);
}
}
}
Hier Activity.class
public class Items extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
private ItemAdapter mAdapter;
SQLiteDatabase mDb;
Spinner spinnerCategory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_items);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
DBHelper DBHelper = new DBHelper(this);
RecyclerView itemsRecylerView;
itemsRecylerView = (RecyclerView) this.findViewById(R.id.items_recylerview);
itemsRecylerView.setLayoutManager(new LinearLayoutManager(this));
spinnerCategory = (Spinner) findViewById(R.id.categorySpinner);
List<String> categories = DBHelper.getCategoryList();
ArrayAdapter<String> aCategory = new ArrayAdapter<>(
this, android.R.layout.simple_spinner_item, categories);
aCategory.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerCategory.setAdapter(aCategory);
mDb = DBHelper.getReadableDatabase();
String name = spinnerCategory.getSelectedItem().toString();
Cursor cursor = getAllItems(name);
mAdapter = new ItemAdapter(this, cursor);
itemsRecylerView.setAdapter(mAdapter);
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
long id = (long) viewHolder.itemView.getTag();
removeTransaction(id);
String name = spinnerCategory.getSelectedItem().toString();
mAdapter.swapCursor(getAllItems(name));
}
}).attachToRecyclerView(itemsRecylerView);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()) {
case R.id.categorySpinner:
String name = spinnerCategory.getSelectedItem().toString();
mAdapter.swapCursor(getAllItems(name));
mAdapter.notifyDataSetChanged();
break;
}
}
public void onNothingSelected(AdapterView<?> parent) {
}
private Cursor getAllItems(String catName) {
return mDb.query(
ItemContract.ItemEntry.TABLE_NAME,
null,
ItemContract.ItemEntry.COLUMN_ITEM_CATEGORY + " IS " + "'" + catName + "'",
null,
null,
null,
ItemContract.ItemEntry.COLUMN_ITEM_NAME
);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
private boolean removeTransaction(long id) {
return mDb.delete(ItemContract.ItemEntry.TABLE_NAME,
ItemContract.ItemEntry._ID + "=" + id,
null) > 0;
}
public void onResume() {
super.onResume();
String name = spinnerCategory.getSelectedItem().toString();
mAdapter.swapCursor(getAllItems(name));
mAdapter.notifyDataSetChanged();
}
public void onPause() {
super.onPause();
String name = spinnerCategory.getSelectedItem().toString();
mAdapter.swapCursor(getAllItems(name));
mAdapter.notifyDataSetChanged();
}
}
Post swapCursor() Code –
@ R.R.M hinzugefügt, was Sie – Mikitz06
angefordert habe ich für swapCursor() -Methode des Adapterklasse angefordert. Dies ist die getAllItems() -Methode. –