как я могу управлять макетом строки элемента recyclerView после его полного смахивания? - PullRequest
0 голосов
/ 30 мая 2020

У меня есть recyclerView с функцией смахивания, но каждый раз, когда я смахиваю элемент, он отклоняется, и это не то, что я ищу. Мне нужно что-то вроде смахивания в WhatsApp, то есть после смахивания я могу выполнить действие с этой строкой, не отклоняя ее. В этом случае, например, у меня есть TextView, для которого установлена ​​видимость INVISIBLE, и после полного смахивания я хочу, чтобы он стал видимым в строке с проведенным смахиванием. Есть ли способ добиться этого?

My AdapterClas:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

List <MyModel> list;
Context context;

public MyAdapter(List<MyModel> list, Context context) {
    this.list = list;
    this.context = context;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View itemLista = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_row,parent,false);

    return new MyViewHolder(itemLista);
}

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

    MyModel myModel = list.get(position);

    holder.txt1.setText(String.valueOf(myModel.getPosition()));


}

@Override
public int getItemCount() {
    return list.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder{

    TextView txt1;
    TextView txt2;


    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        txt1 = itemView.findViewById(R.id.row_textView);
        txt2 = itemView.findViewById(R.id.row_textView2);

        //I WANT TO MAKE THIS txt2 BECOME VISIBLE AFTER SWIPE



    }
}

Функциональность смахивания:

public void swipe () {
    ItemTouchHelper.Callback itemTouch = new ItemTouchHelper.Callback() {
        @Override
        public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
            int dragFlag = ItemTouchHelper.ACTION_STATE_IDLE;
            int swipeFlag = ItemTouchHelper.START|ItemTouchHelper.END;

            return makeMovementFlags(dragFlag,swipeFlag);

        }

        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
            Toast.makeText(MainActivity.this, "Swiped", Toast.LENGTH_SHORT).show();

        }
    };

    new ItemTouchHelper(itemTouch).attachToRecyclerView(recyclerView);
}

Моя строка макета RecyclerView:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_margin="6dp"
android:orientation="vertical"
android:background="@android:color/holo_orange_light"
android:layout_height="wrap_content">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/row_textView"
    android:textColor="@android:color/black"
    android:textSize="22sp"
    />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="22sp"
    android:visibility="invisible"
    android:id="@+id/row_textView2"/>

1 Ответ

0 голосов
/ 30 мая 2020

добавьте этот код в раздел смахивания, тогда все будет в порядке.

@Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
        Toast.makeText(MainActivity.this, "Swiped", Toast.LENGTH_SHORT).show();
        viewHolder.itemView.setVisibility(View.VISIBLE);
        yourAdapter.notifyDataSetChanged();
    }
};
...