2017-02-23 48 views
-1

当我点击RecyclerView的任何项目。它会告诉我这个项目的细节。我怎样才能做到这一点?我已经使用Retrofit库。我为这个RecyclerView创建了一个适配器。我已经提到它了。如何在RecyclerView中编写“onItemClickListener”?

活动:

List<TargetFile> targetfiles=response.body().getTargetfileslist(); 

Log.d(TAG,"Number of targetfileslist: "+targetfiles.size()); 
recyclerView.setAdapter(new TargetFileAdapter(targetfiles,R.layout.list_item_targetfile,getApplicationContext())); //RecyclerView 

适配器:

public class TargetFileAdapter extends RecyclerView.Adapter<TargetFileAdapter.TargetFileViewHolder> { 

    private List<TargetFile> targetfiles; 
    private int rowLayout; 
    private Context context; 

    public TargetFileAdapter(List<TargetFile> targetfiles, int rowLayout, Context context) { 
     this.targetfiles = targetfiles; 
     this.rowLayout = rowLayout; 
     this.context = context; 
    } 



    public static class TargetFileViewHolder extends RecyclerView.ViewHolder{ 
     LinearLayout targetFilesLayout; 
     TextView fileno,partyname,mobile,address; 

     public TargetFileViewHolder(View v){ 
      super(v); 
      targetFilesLayout=(LinearLayout)v.findViewById(R.id.targetfile_layout); 
      fileno=(TextView)v.findViewById(R.id.fileno); 
      partyname=(TextView)v.findViewById(R.id.partyname); 
      address=(TextView)v.findViewById(R.id.adrs); 
     } 
    } 

    @Override 
    public TargetFileAdapter.TargetFileViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ 
     View view= LayoutInflater.from(parent.getContext()).inflate(rowLayout,parent,false); 
     return new TargetFileViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(TargetFileViewHolder holder,final int position){ 
     holder.fileno.setText(targetfiles.get(position).getFileno()); 
     holder.partyname.setText(targetfiles.get(position).getPartyname()); 
     holder.address.setText(targetfiles.get(position).getAddress()); 

    } 

    @Override 
    public int getItemCount() { 
     return targetfiles.size(); 
    } 
} 
+0

使'TargetFileViewHolder'实现'OnClickListener'并呼吁'setOnClickListener'在'TargetFileViewHolder'构造 – pskink

+0

您可以在'RecyclerView'创建'OnItemClickListener'但如果你可以用'ListView'度日,它已经有一个内置的。 –

回答

0

可以将视图onClickListener存储TargetFileViewHolder内,然后设置为它在onBindViewHolder

public static class TargetFileViewHolder extends RecyclerView.ViewHolder{ 
    LinearLayout targetFilesLayout; 
    TextView fileno,partyname,mobile,address; 
    View view;            // add this line 

    public TargetFileViewHolder(View v){ 
     super(v); 
     targetFilesLayout=(LinearLayout)v.findViewById(R.id.targetfile_layout); 
     fileno=(TextView)v.findViewById(R.id.fileno); 
     partyname=(TextView)v.findViewById(R.id.partyname); 
     address=(TextView)v.findViewById(R.id.adrs); 
     view = v;           // then this line 
    } 
} 

之后,修改onBindViewHolder像这样的方法:

@Override 
public void onBindViewHolder(TargetFileViewHolder holder,final int position){ 
    holder.fileno.setText(targetfiles.get(position).getFileno()); 
    holder.partyname.setText(targetfiles.get(position).getPartyname()); 
    holder.address.setText(targetfiles.get(position).getAddress()); 

    // set on click listener to the view 
    holder.view.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(context, TargetActivity.class); 
      context.startActivity(intent); 
     } 
    }); 
} 

然而,你targetfile_layout必须可以点击即android:clickable="true"

+0

不明白的人谁已经降低了我的答案 – Marat

+0

我可以看到使用吐司的位置。但是当我重定向到另一个活动,那么应用程序就会停止! –

+0

发表的另一项活动 – Marat

1

iimport android.support.v7.widget.RecyclerView; import android.view.View;

public class TargetFileAdapter extends RecyclerView.Adapter<TargetFileAdapter.TargetFileViewHolder> { 

    private List<TargetFile> targetfiles; 
    private int rowLayout; 
    private Context context; 
    private OnTargetFileListener listener; 

    public TargetFileAdapter(List<TargetFile> targetfiles, int rowLayout, Context context, OnTargetFileListener listener) { 
     this.targetfiles = targetfiles; 
     this.rowLayout = rowLayout; 
     this.context = context; 
     this.listener = listener; 
    } 

    @Override 
    public TargetFileAdapter.TargetFileViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false); 
     return new TargetFileViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(TargetFileViewHolder holder, final int position) { 
     holder.fileno.setText(targetfiles.get(position).getFileno()); 
     holder.partyname.setText(targetfiles.get(position).getPartyname()); 
     holder.address.setText(targetfiles.get(position).getAddress()); 

    } 

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

    public static class TargetFileViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     LinearLayout targetFilesLayout; 
     TextView fileno, partyname, mobile, address; 

     public TargetFileViewHolder(View v) { 
      super(v); 
      targetFilesLayout = (LinearLayout) v.findViewById(R.id.targetfile_layout); 
      fileno = (TextView) v.findViewById(R.id.fileno); 
      partyname = (TextView) v.findViewById(R.id.partyname); 
      address = (TextView) v.findViewById(R.id.adrs); 

      v.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      if (listener == null){ 
       return; 
      } 

      TargetFile file = targetfiles.get(getAdapterPosition()); 
      listener.onFileTargetClicked(file); 
     } 
    } 

    public interface OnTargetFileListener { 
     void onTargetFileClicked(TargetFile file); 
    } 
} 

此代码应该适合您。您需要在您的活动或使用适配器的位置实施OnTargetFileListener。

祝你好运!

Emre。

0

1,创建一个接口

public interface CustomItemClickListener { 
    public void onItemClick(View v, int position); 
} 

2.Adapter

CustomItemClickListener customItemClickListener; 
public MyAdapter(Context context, List<Data> dataset, CustomItemClickListener customItemClickListener) { 
    inflator = LayoutInflater.from(context); 
    this.data= dataset; 
    this.customItemClickListener = customItemClickListener; 
} 

public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    final View view = inflator.inflate(R.layout.password_list_items, parent, false); 
    final MyViewHolder myViewHolder = new MyViewHolder(view); 
    view.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      customItemClickListener.onItemClick(view, myViewHolder.getAdapterPosition()); 
     } 
    }); 
    return myViewHolder; 
} 

3.ACTIVITY

myRecyclerView.setAdapter(new MyAdapter(getApplicationContext(), dataset, new CustomItemClickListener() { 
     @Override 
     public void onItemClick(View v, int position) { 
      Toast.makeText(getApplicationContext(), "Clicked -> " + position, Toast.LENGTH_SHORT).show(); 
     } 
    })); 

它的工作对我来说,我希望它会帮助你

+0

我不明白。所有人的职位都一样。 recyclerView.setAdapter(新TargetFileAdapter(targetfiles,R.layout.list_item_targetfile,getApplicationContext(),新TargetFileAdapter.CustomItemClickListener(){ @覆盖 公共无效onItemClick(视图V,INT位置){ Toast.makeText(getApplicationContext( ),“Clicked - >”+ position,Toast.LENGTH_SHORT).show(); } })); –

+0

它给了什么位置? – RikudouSennin