2015-12-29 3 views
1

Я пытаюсь выполнить следующий эффект: swipingСмахивающего вид на другую точку зрения

Я хочу вид быть swipable. Во время и после прокрутки над ним должно появиться другое представление (которое я могу указать). Я попытался использовать RecyclerView вместе с ItemTouchHelper.SimpleCallback после this tutorial, но это позволяет указывать только RecyclerView.ViewHolder, а затем обновлять его с помощью обновленного набора данных. Я хочу полностью указать новый RecyclerView.ViewHolder для просмотра ниже, когда вызывается метод onSwiped.

Я был бы признателен, если бы вы могли указать мне на лучший способ использования RecyclerView или на другой способ выполнения этой задачи.

Мой код выглядит следующим образом.

класс MyActivity:

public class MyActivity extends AppCompatActivity { 
    private RecyclerView mRecyclerView; 
    private RecyclerView.Adapter mAdapter; 
    private RecyclerView.LayoutManager mLayoutManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_swipe_test); 

     mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 

     // use this setting to improve performance if you know that changes 
     // in content do not change the layout size of the RecyclerView 
     mRecyclerView.setHasFixedSize(true); 

     // use a linear layout manager 
     mLayoutManager = new LinearLayoutManager(this); 
     mRecyclerView.setLayoutManager(mLayoutManager); 

     // specify an adapter (see also next example) -- useless at the moment 
     String[] myDataset = {"a"}; 
     mAdapter = new MyAdapter(myDataset); 
     mRecyclerView.setAdapter(mAdapter); 

     ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) { 
      /* 
      No need to worry about this since we're not supporting drag and drop. 
      */ 
      @Override 
      public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { 
       return false; 
      } 

      @Override 
      public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) { 
       //Remove swiped item from list and notify the RecyclerView 
       mAdapter.notifyDataSetChanged(); 
      } 
     }; 

     ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); 
     itemTouchHelper.attachToRecyclerView(mRecyclerView); 
    } 
} 

MyAdapter класс:

public class MyAdapter extends RecyclerView.Adapter<ChallengeAdapter.MyViewHolder> { 
    // useless at the moment since we are only using one item 
    private String[] mDataset; 

    // Provide a reference to the views for each data item 
    // Complex data items may need more than one view per item, and 
    // you provide access to all the views for a data item in a view holder 
    public static class MyViewHolder extends RecyclerView.ViewHolder { 
     // each data item is just a string in this case 
     public RelativeLayout mRvItem; 
     public MyViewHolder(View v) { 
      super(v); 
      mRvItem = (RelativeLayout) v; 
     } 
    } 

    // Provide a suitable constructor (depends on the kind of dataset) 
    public ChallengeAdapter(String[] myDataset) { 
     // useless at the moment 
     mDataset = myDataset; 
    } 

    // Create new views (invoked by the layout manager) 
    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     // create a new view 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rv_item, parent, false); 
     MyViewHolder vh = new MyViewHolder(v); 
     return vh; 

    } 

    // Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     // - get element from your dataset at this position 
     // - replace the contents of the view with that element 
    } 

    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     // useless at the moment 
     return mDataset.length; 
    } 
} 

Спасибо.

+0

Оставьте свой код. –

+0

@AnjaliTripathi Отправленный код. – sk1ll3r

ответ

0

Используйте эту библиотеку, чтобы выполнить функцию, что вы хотели Bayoz Swipe Menu

0

Эта библиотека выглядит хорошо. Добавлено на androidweekly на этой неделе. https://github.com/TUBB/SwipeMenuRecyclerView

+0

Это разрешает только 2 вида: содержание и меню. Это полезно в некоторых сценариях, но я думаю, что в этом случае это неприменимо. – sk1ll3r

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