Недавно я создал представление списка категорий, состоящее из разных категорий. Каждая категория будет иметь разные предметы. Моя цель - вставить элементы в выбранную категорию.
К сожалению, я не смог получить намерение categoryID
в действии ListView
, поскольку я передаю его в AddItems
активность. Хотя я добился этого между CategoryAdapter
и ListView
, потому что мне удалось получить позицию Category
в CategoryAdapter
.
Я пытался пройти от выбранного categoryID
до действия AddItems
, но в результате position
возвращает ноль. (Я объявил эту переменную как глобальное целое число в упомянутой операции).
Пожалуйста, посмотрите на мой код ниже:
Категория Класс:
public class Category {
private int id;
private String name;
public Category() {
}
public Category(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@NonNull
@Override
public String toString() {
return getName();
}
}
Категория Адаптер:
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(contxt);
View view = inflater.inflate(rsrc, null, false);
catName = view.findViewById(R.id.txtCategory);
catName.setText(cat.getName());
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Category cat = category.get(position);
int categoryID = cat.getId();
Intent intent = new Intent(contxt, ListView.class);
intent.putExtra("CategoryID", categoryID);
contxt.startActivity(intent);
}
});
return view;
}
ListView Activity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
edName = findViewById(R.id.txtView2);
edBirth = findViewById(R.id.txtView3);
Intent intent = getIntent();
int categoryID = intent.getIntExtra("CategoryID", 0);
populateList(categoryID);
}
private void populateList(int categoryID){
dbhelper = new DB(getApplicationContext());
itemsInfoList = dbhelper.getItemsByCatId(categoryID);
listView = findViewById(R.id.li_view);
ItemsAdapter adapter = new ItemsAdapter(
this, R.layout.adapter_view_layout, itemsInfoList, true);
listView.setAdapter(adapter);
}
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.btn_add:
Intent intent = new Intent(ListView.this, AddItems.class);
Category selectedCategory = (Category) categories.get(position);
int categoryID = selectedCategory.getId();
intent.putExtra("CategoryID", categoryID);
startActivity(intent);
return (true);
}
return super.onOptionsItemSelected(item);
}
AddItems Activity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_items);
final int CategoryID = getIntent().getIntExtra("CategoryID", 0);
Toast.makeText(this, String.valueOf(CategoryID), Toast.LENGTH_SHORT).show();
addItems.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
insertItems(CategoryID);
finish();
}
});
}
public void insertItems(int CategoryID) {
String itemName = itName.getText().toString().trim();
String dateSelected = displayDate.getText().toString().trim();
DB dbHelper = new DB(getApplicationContext());
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ItemsEntry.PetTable.COLUMN_PET_NAME, itemName);
values.put(ItemsEntry.PetTable.COLUMN_PET_BIRTHDAY, dateSelected);
values.put(ItemsEntry.PetTable.COLUMN_CATEGORY_ID, CategoryID);
long insertRow = db.insert(ItemsEntry.PetTable.TABLE_NAME, null, values);
if(insertRow == -1){
Toast.makeText(AddItems.this, "Error", Toast.LENGTH_SHORT).show();
}else{
Intent intent = new Intent(AddItems.this, ListView.class);
startActivity(intent);
Toast.makeText(AddItems.this, "Inserted", Toast.LENGTH_SHORT).show();
}
}
Наконец, как Могу ли я получить выбранный categoryID
и передать его на AddItems
активность?
Любая помощь будет принята с благодарностью. Спасибо!