2017-10-09 71 views
0

我試圖從我的適配器中獲取一些數據以取得成功。我在我的主要活動功能獲得一些項目的位置,並需要從這個項目的項目名稱。我可以想出如何實現這一點。如果有人能幫我解決問題,我會很高興。從我的主要活動將數據從適配器返回到功能

功能 -

 public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { 
      int position = viewHolder.getAdapterPosition(); 

      if (direction == ItemTouchHelper.LEFT) { 
       Log.e(TAG, RecyclerAdapter.getIdFromPosition(position)); // Here what I try to do but to achieve that the getIdFromPosition 
                      function need to be static and I can do this function to be static 
      } else { 
       Log.e(TAG,"Right"); 
      } 
     } 

適配器功能 -

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { 

List<Task> data= Collections.emptyList(); 

public RecyclerAdapter(MainActivity mainActivity, List<Task> data) { 
    this.data = data; 
} 


@Override 
public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_list, viewGroup, false); 
    return new ViewHolder(view); 
} 

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

    Task current = data.get(position); 

    //holder.tv1.setText(name[position]); 
    ViewHolder.tv2.setText(current.data); 
    if(current.sync != "null"){ 
     holder.tv1.setText("A"); 
    } 
    holder.imageView.setTag(holder); 
} 

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

public void getIdFromPosition(int position){ 
    Log.e(TAG, data.get(position).getId()); 
} 

public static class ViewHolder extends RecyclerView.ViewHolder{ 
    public TextView tv1; 
    public static TextView tv2; 
    public ImageView imageView; 

    public ViewHolder(View view) { 
     super(view); 

     tv1 = (TextView) view.findViewById(R.id.list_title); 
     tv2 = (TextView)view.findViewById(R.id.list_desc); 
     imageView = (ImageView) view.findViewById(R.id.list_avatar); 

     view.setOnClickListener(new View.OnClickListener() { 
      @Override public void onClick(View v) { 
       //Log.e("test","test"); 
      } 
     }); 

    } 
} 
+0

可能的重複[如何將Onclick監聽器添加到回收站v (https://stackoverflow.com/questions/44151979/how-to-add-onclick-listener-to-recycler-view) –

+0

你可以在SO上的許多帖子中找到這個問題的答案。例如:[Recycler onClick](https://stackoverflow.com/questions/24471109/recyclerview-onclick) 和[here](https://stackoverflow.com/questions/44151979/how-to-add-onclick- listener-to-recycler-view) –

+0

@sam_c問題不在於onClick,問題在於需要獲取Adapter參數的onSwiped函數。 – 0day

回答

0
public interface RecyclerClick { 
    void onClick(Object o); 
} 

現在添加界面在適配器構造函數的參數:

public RecyclerAdapter(MainActivity mainActivity, List<Task> data, RecyclerClick click) { 
    this.data = data; 
    this.click = click; 
} 

而且viewholder內,調用的onClick:

view.setOnClickListener(new View.OnClickListener() { 
     @Override public void onClick(View v) { 
      //Log.e("test","test"); 
      //Pass any object u want 
      click.onClick(current); 
     } 
    }); 

並在您的主要活動實現此接口,並通過this作爲適配器構造函數的參數:

adapter = new RecyclerAdapter(this, data, this); 

現在,在方法的onClick您的主要活動將在每次點擊時使用所需的數據/對象進行調用。

+0

我認爲你不明白這個問題,問題與onSwiped函數,需要設置參數,而不是onClick函數。 – 0day

0

要實現刷卡爲RecyclerView需要實現在承載RecyclerView適配器的活動或片段ItemTouchHelper.SimpleCallback

事情是這樣的:

ItemTouchHelper touchHelper = new ItemTouchHelper(
new ItemTouchHelper.SimpleCallback(ItemTouchHelper.LEFT) { 

    @Override 
    public abstract boolean onMove(RecyclerView recyclerView, 
     ViewHolder viewHolder, ViewHolder target) { 

     return true;// true if moved, false otherwise 
    } 

    @Override 
    public void onSwiped(ViewHolder viewHolder, int direction) { 
     int position = viewHolder.getAdapterPosition(); 
     MyData dataObj = myDataList.get(position); 
     // execute whatever you choose to here. 
    } 
}); 

然後,當你建立你的RecyclerView附加ItemTouchHelper

touchHelper.attachToRecyclerView(yourRecyclerView); 
+0

我只是不會從適配器傳遞數據而不實施刷卡,因爲我的刷卡功能都準備就緒,只需要數據。 – 0day

+0

我不清楚你想要什麼。我不明白您希望通過我們所討論的您訪問數據的任何操作來促使數據傳遞。 –