2017-02-23 3 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'を実装するようにします'TargetFileViewHolder'コンストラクタで' setOnClickListener'を呼び出す – pskink

+0

'RecyclerView'で' OnItemClickListener'を作成することはできますが、 'ListView'で手に入れることができれば、既にそれが組み込まれています。 –

答えて

0

あなたがTargetFileViewHolderの内部でビューを保存し、onBindViewHolderでそれにonClickListenerを設定することができます。その後

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

人を理解できません私の答えをdownvoted – Marat

+0

私はトーストを使用して位置を見ることができます。しかし、別のアクティビティにリダイレクトすると、アプリケーションが停止します。 –

+0

エラーログと別のアクティビティのコード – Marat

1

android.support.v7.widget.RecyclerView iimportでなければなりません。 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.Createインタフェース

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(){@Override ます。public void onItemClick(ビューV、int型の位置){ Toast.makeText(getApplicationContext( )、 "Clicked - >" + position、Toast.LENGTH_SHORT).show(); } })); –

+0

どのようなポジションですか? – RikudouSennin

関連する問題