Mikhail Shport
Mikhail Shport

Reputation: 13

How can I send text value from ViewHolder to ItemTouchHelper class?

I've been learning Java and Android Development for about a month. Maybe, I don't know some features... But I can't find any advise for a week. I need to send value from one of my fields in ViewHolder (created by onBindViewHolder) to overrided method onChildDraw (in class, that extends ItemTouchHelper). But I can't understand, how can I do this. I want to call new activity after swipe action and send value of field "name" to that activity. Can I do this with Intent? Or maybe have other way?

Creating ViewHolder (public class ModelsDataAdapter extends RecyclerView.Adapter):

@Override
public void onBindViewHolder(ModelsViewHolder holder, int position) {

    ModelsData model = models.get(position);
    holder.name.setText(model.getName()); // <-- I NEED THIS VALUE
    holder.tags.setText(model.getTags());
    holder.keywords.setText(model.getKeywords());
    holder.cost.setText(model.getCost().toString());

    //-- some code --//
}

My onChildDraw (public class SwipeControl extends ItemTouchHelper.Callback):

@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {

    //-- some code --//

    int x = 0;
    if (dX < -200){ //
        viewHolder.itemView.findViewById(R.id.card_foreground).setTranslationX(dX / 3);
    } else if (dX > 200){
        viewHolder.itemView.findViewById(R.id.card_foreground).setTranslationX(dX / 3);
        openStatCard();
    } else if (dX == 0){
        checkActivity = false;
    }
}

Opening new activity (inside SwipeControl.class):

private void openStatCard(){
    if (!checkActivity) {
        checkActivity = true;
        Intent intent = new Intent(context, StatCards.class);
        intent.putExtra("choosingModel", model); // <-- PUT "name" IN "model"
        context.startActivity(intent);
    }
}

Upvotes: 1

Views: 402

Answers (1)

Rahul Khurana
Rahul Khurana

Reputation: 8844

Inside onChildDraw method use viewHolder.getAdapterPositon() method to get the position. And when you need the value just use that position to find Name from the models list

EDIT

Inside onChildDraw get the TextView using viewHolder.itemView.findViewById(R.id.name); and then use getText() method to get the Name.

Upvotes: 1

Related Questions