RecyclerView
にonClickListener
を設定する方法はありますか?RecyclerViewをクリックする方法(子供ではない)
私はRecyclerView
に子供がいて、OnClickListener
を親のRecyclerView
に設定しています。ただし、そのビューをクリックするとonClick
は起動しません。以下のサンプルコードを参照してください - 親にクリックを得たい、NOT子供たち。このシナリオでは、アイテムのクリックには気にしません。
私は役に立たない子供にsetFocusable(false)
、setClickable(false)
、およびsetOnClickListener(null)
をやってみました。いずれにしても、子どもがいない地域をクリックすると、クリックも登録されないため、子どもが親からクリックを奪っているとは思われません。
package com.formagrid.hellotest;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.Arrays;
import java.util.List;
public class HelloActivity extends Activity {
private RecyclerView mRecyclerView;
private RecyclerAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hello);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new RecyclerAdapter(Arrays.asList("hi", "this", "is", "some", "text"));
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("patricia", view.toString());
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.Holder> {
public class Holder extends RecyclerView.ViewHolder {
protected TextView textView;
public Holder(TextView itemView) {
super(itemView);
this.textView = itemView;
}
}
private List<String> contents;
public RecyclerAdapter(List<String> contents) {
this.contents = contents;
}
@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
return new Holder(new TextView(parent.getContext()));
}
@Override
public void onBindViewHolder(Holder holder, int position) {
holder.textView.setText(contents.get(position));
}
@Override
public int getItemCount() {
return contents.size();
}
}
}
私たちのために毛むくじゃらする可能性があります。 'RecyclerView'が' performClick'を呼び出さない理由を知っていますか? –
さて、デザイナーには明確な答えを尋ねる必要がありますが、それは決してそのように使われることを意図したものではないからです。通常、ユーザーにリストを提示するときは、個々のアイテムの相互作用にもっと関心があります。どのようにあなたのために毛むくじゃらされますか?あなたが余分なコードを心配しているなら、あなたの 'Activity'のコードを汚染しないように、' RecyclerView'サブクラスにこれを実装することができます。既にジェスチャーを使用しているという場合は、この機能を既存のものに追加するだけで済みます。 –
'OnClickListener'を使って死んでしまった場合、' RecyclerView'をサブクラス化して 'performClick()'を自分で呼び出すことができますが、単純なクリックとの区別のためにタッチイベントを追跡する必要があります。それは基本的にすべての 'GestureDetector'がやっていることです。 –