Android 必须双击RecyclerView项的onClick调用';s文本视图
我在Android 必须双击RecyclerView项的onClick调用';s文本视图,android,android-fragments,adapter,onclicklistener,double-click,Android,Android Fragments,Adapter,Onclicklistener,Double Click,我在片段中有一个RecyclerView。此片段在多个活动中重用。我已经在我的片段和回收视图.Adapter之间设置了一个契约接口。本合同具有以下功能: 回调接口 在我的片段中,我实现了如下侦听器: 碎片 在适配器中,我执行以下操作: RecyclerView.适配器 公共类samdeccapter扩展了RecyclerView.Adapter{ 私有文本视图ClickListener McClickListener; public void setClickListener(SampleFra
片段中有一个RecyclerView
。此片段
在多个活动中重用。我已经在我的片段
和回收视图.Adapter
之间设置了一个契约接口
。本合同具有以下功能:
回调接口
在我的片段中,我实现了如下侦听器:
碎片
在适配器中,我执行以下操作:
RecyclerView.适配器
公共类samdeccapter扩展了RecyclerView.Adapter{
私有文本视图ClickListener McClickListener;
public void setClickListener(SampleFragment SampleFragment){
试一试{
this.mClickListener=((TextViewClickListener)sampleFragment);
}catch(ClassCastException e){
//打印错误
}
}
//更多初始化代码
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
SampleViewHolder sampleVH=(SampleViewHolder)支架;
sampleVH.textView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mClickListener.onHandleClick();
}
});
}
公共类SampleViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图文本视图;
公共样本视图持有者(视图v){
超级(五);
textView=//初始化textView
}
}
}
我的问题是为什么需要双击onHandleClick
方法才能在我的Fragment
中触发,我该如何解决这个问题
我想让用户只需点击TextView
一次onHandleClick()
即可触发。
如果此设置太复杂,是否有更简单的过程,我知道回收视图的OnItemTouchListener()
,这不适合我的用例-我特别希望单击事件仅作为视图持有者视图的某些部分的句柄
更新:
我相信问题可能在于,由于视图持有者有一个整体视图,我假设是视图。一旦该视图触发了clicklistener
,然后触发了文本视图,我将对此进行进一步调查。删除android:focusableInTouchMode=“true”从你在adapter中膨胀的布局中删除android:focusableInTouchMode=“true”
和android:focusable=“true”
为我做到了这一点
public interface TextViewClickListener {
void onHandleClick();
}
public class ExampleFragment extends Fragment implements TextViewClickListener {
// Initializing Code....
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_sample, null);
mRecyclerView = // Initialize
mAdapter.setClickListener(this);
return root;
}
// Overriding listener
@Override
public void onHandleClick() {
// Do something
}
}
public class SampleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private TextViewClickListener mClickListener;
public void setClickListener(SampleFragment sampleFragment) {
try {
this.mClickListener = ((TextViewClickListener) sampleFragment);
} catch (ClassCastException e) {
// Print error
}
}
// More initializing code
public void onBindViewholder(RecyclerView.ViewHolder holder, int position) {
SampleViewHolder sampleVH = (SampleViewHolder) holder;
sampleVH.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mClickListener.onHandleClick();
}
});
}
public class SampleViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
public SampleViewHolder(View v) {
super(v);
textView = // Initialize textview
}
}
}