2017-02-02 3 views
1

Я пытаюсь получить доступ к значениям внутри своего RecyclerView и передать их другому элементу. У меня есть метод onClick(), который вызывается, когда элемент прослушивается, и я могу получить его позицию, используя метод getPosition().Как я могу получить доступ к значениям внутри моего ресайклера?

private List<BucketItem> mItemList; 
private Context mContext; 

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener 
{ 
    public CheckedTextView nameCheckedTextView; 
    public TextView descriptionBox, date, latitude, longitude; 

    public ViewHolder(View itemView) 
    { 
     super(itemView); 
     itemView.setOnClickListener(this); 
     nameCheckedTextView = (CheckedTextView) itemView.findViewById(R.id.checkedTextView); 
     descriptionBox = (TextView) itemView.findViewById(R.id.itemDescription); 
     date = (TextView) itemView.findViewById(R.id.itemDate); 
     latitude = (TextView) itemView.findViewById(R.id.itemLatitude); 
     longitude = (TextView) itemView.findViewById(R.id.itemLongitude); 
    } 

    @Override 
    public void onClick(View view) 
    { 
     Intent intent = new Intent(this, EditItem.class); 
     Toast.makeText(view.getContext(), "position = " + getPosition(), Toast.LENGTH_SHORT).show(); 
    } 
} 

Проблема заключается в том, что я не знаю, как получить фактические значения полей элемента, так что я могу передать его следующему деятельности. Кто-нибудь знает, есть ли простой способ сделать это?

ответ

2

Вы можете получить доступ к этому "пункт" внутри onBindViewHolder() (в адаптере recyclerView):

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.update(items.get(position)); 
} 

и внутри ViewHolder:

public void update(Item item) { 
    // here you can use "item" 
} 

EDIT: вы можете иметь private Item item внутри ViewHolder, и внутри update() do:

public void update(Item item) { 
    this.item = item; 
} 

Теперь вы можете использовать this.item внутри onClick()

+0

Как это помогает мне, если мой метод onClick находится внутри ViewHolder? –

+0

check my edit .. –

+0

Он не может распознать «Предмет», и я вообще не понимаю, что вы пытаетесь сделать. –

0

Внутри onBindViewHolder, если вы какие-то данных в качестве конечных строк или конечных Интсов, а затем создать onClickListener с этими финалами то каждый раз новые onClickListerners будут называться они будут называться с финалами внутри них ,

это упрощенная версия моего приложения:

public void onBindViewHolder(FR_Adapter.ViewHolder holder, final int positionCard) { 

    //this is where you call the db and fill the card with data, 
    CardView cardView = holder.cardView; 
    TextView textView = (TextView) cardView.findViewById(R.id.question); 
    final String stringInTextView = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    textView.setText(stringInTextView); // this example should only show the time when the card was created 

    cardView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      reactToClick(positionCard,stringInTextView,true); 
     } 
    }); 
} 

private void reactToClick(int positionCard,String stringInTextView, boolean wasClick) { 
    Log.v("custom Log.v call","click at position " + positionCard + "text in card was" + stringInTextView); 
} 

(в основном, если у вас есть 20 карт, то каждый из 20 onClickListener запомнит строку, сохраненный, когда карта была впервые показана +, что Int positionCard)

//to add more vars just 1create them as final, 2add them in the method call, 3modify the method to have more arguments: 

final String newVariable = MainActivity.getAppStartTime() // << 1add this 

reactToClick(positionCard,stringInTextView,true,newVariable); // << 2edit this 

reactToClick(int positionCard,String stringInTextView, boolean wasClick, String newVariable) // << 3edit this 
+0

Итак, если у карты больше одной строки, мне нужно передать эту информацию методу 'responseToClick'? –

+0

выше информация @GabrielaMarinho –

Смежные вопросы