Как получить идентификатор выбранной категории в Intent? - PullRequest
0 голосов
/ 25 января 2020
  1. Недавно я создал представление списка категорий, состоящее из разных категорий. Каждая категория будет иметь разные предметы. Моя цель - вставить элементы в выбранную категорию.

  2. К сожалению, я не смог получить намерение categoryID в действии ListView, поскольку я передаю его в AddItems активность. Хотя я добился этого между CategoryAdapter и ListView, потому что мне удалось получить позицию Category в CategoryAdapter.

  3. Я пытался пройти от выбранного categoryID до действия AddItems, но в результате position возвращает ноль. (Я объявил эту переменную как глобальное целое число в упомянутой операции).

  4. Пожалуйста, посмотрите на мой код ниже:

Категория Класс:

    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 активность?

Любая помощь будет принята с благодарностью. Спасибо!

...