Как передать данные из (RecyclerView с Sqlite) в следующее действие? - PullRequest
0 голосов
/ 19 июня 2020

(Немного расширенные вопросы).
У меня есть recyclerview с базой данных Sqlite. На одной карточке recyclerview есть некоторая информация, но если пользователю нужны дополнительные сведения, щелкните ее и откройте новое действие. Проблема в том, как передать информацию из reyclerview в новое действие через Parcelable. (сокращенная версия моего кода):
Edit_Product Activity.class с рециклером:

 mAdapter.setOnItemClickListener(new Recycler_Adapter.ClickListener() {
            @Override
            public void onItemClick(View itemview) {
                itemClick((long) itemview.getTag());
            }

  public void itemClick(long id){
        Intent intent = new Intent(this, Product_specific_detail.class);
        intent.putExtra("key", getAllItems().getPosition()  <-- Where getAllItems() is my Cursor);
        startActivity(intent);
    }

Item_get_copy.class

public class Item_get_copy implements Parcelable {
    public String Name_Product;
    public int Amount;
     public Item_get_copy(String text1, int mAmount){
        Name_Product = text1;
        Amount = mAmount;
    }
   protected Item_get_copy(Parcel in) {
        Name_Product = in.readString();   
        Amount = in.readInt(); 
    }

    public static final Creator<Item_get_copy> CREATOR = new Creator<Item_get_copy>() {
        @Override
        public Item_get_copy createFromParcel(Parcel in) {
            return new Item_get_copy(in);
        }

        @Override
        public Item_get_copy[] newArray(int size) {
            return new Item_get_copy[size];
        }
    };
    public String getText(){
        return Name_Product;
    }
    public int getmAmount(){
    return Amount;
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(Name_Product);
    dest.writeInt(Amount);
      }
}

Product_specifc_details.class


public class Product_specific_detail extends AppCompatActivity {
    private TextView product_name;
    private TextView amount_text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_product_specific_detail);
        product_name = findViewById(R.id.detail_name_pr);
    amount_text = findViewById(R.id.detail_amount_pr);

        Intent intent = getIntent();
        Item_get_copy item_get_copy = intent.getParcelableExtra("key");
        String line1 = item_get_copy.getText();
    String line2 = item_get_copy.getText();
    product_name.setText(line1);
    amount_text.setText(line2);
    }
}

Recycler_Adapter имеет что-то вроде:


  @Override
    public void onBindViewHolder(@NonNull recyclerViewHolder holder, int position) {
String product_name = cursor.getString(cursor.getColumnIndex(NAME_PRODUCT));
int amount = cursor.getInt(cursor.getColumnIndex(AMOUNT));
long id = cursor.getLong(cursor.getColumnIndex(_ID));
holder.itemView.setTag(id);
}

У меня много других переменных (короче мой вопрос: осталось только Name_Product с количеством), но даже Name_product я не могу передать, потому что получаю:
java .lang.NullPointerException: попытка вызвать виртуальный метод 'java .lang.String com.example ... Item_get_copy .getText () 'для ссылки на нулевой объект, щелкнув карточку Recyclerview.
3. Вопросы.
Я хочу сделать это так, как будто оно находится в верхней части моего сообщения (с помощью метода itemClick из Edit_Product.class), это возможно?
Или
Вопрос 1. Я должен вызвать намерение из Recycler_Adapter, а не из Edit_Product.class, как сейчас.
Вопрос 2. Следует ли мне добавлять такой код в Recycler_Adapter:

Item_get_copy item_get_copy = new Item_get_copy();    
item_get_copy.setText(product_name);    
item_get_copy.setInt(amount);    

А также в my Item_get_copy добавьте это:

public void String setText(String text){
        Name_Product = text;
    }
    public void int getmAmount(int number){
    Amount = number;

Вопрос 3. Я видел много сообщений на разных форумах, люди делают это так:
List <...> mListVariable;
mListVariable = new ArrayList <> ();
Это что нужно? Потому что я читал, что лучшим решением является использование SimpleCursorAdapter. Не записывать данные в ArrayList, а затем переходить к следующему действию, потому что это требует больше времени и памяти. Итак ...
3a) ArrayList необходим?
3b) Нужно ли мне использовать SimpleCursorAdapter, если я использую Recycler_Adapter?
3 c) Как решить мою проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...