2017-02-18 61 views
0

我有一个回收器视图与列表和一个进度栏下视图单元格。当我点击其他视图时,点击事件发生。但是当按下回收站查看项目时,什么都不会发生。请告诉我原因。我正在粘贴oncreateview持有者的代码。单击监听器工作的回收视图,但其他意见

class MockSeriesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
    TextView examMeta; 
    RecyclerView subjectBubbles; 
    BubbleAdapter adapter; 
    NumberProgressBar numberProgressBar; 


    public MockSeriesViewHolder(final View itemView) { 
     super(itemView); 
     examMeta = (TextView) itemView.findViewById(R.id.tv_exam_meta); 
     numberProgressBar = (NumberProgressBar) itemView.findViewById(R.id.pb_exam_progress); 

     subjectBubbles = (RecyclerView) itemView.findViewById(R.id.rv_subject_bubbles); 
     subjectBubbles.setHasFixedSize(true); 
     subjectBubbles.setLayoutManager(new LinearLayoutManager(itemView.getContext(), LinearLayoutManager.VERTICAL, false)); 
     adapter = new BubbleAdapter(itemView.getContext()); 
     subjectBubbles.setAdapter(adapter); 

     itemView.setOnClickListener(this); 

    } 

    public void renderMockTestSeries(TestSeriesTest test) { 
     adapter.setItems(test.getSubjects()); 
     examMeta.setText(test.getNoOfQuestions() + " QUESTIONS  " + (test.getTimeLimitInSeconds()/60) + " MINUTES"); 
     numberProgressBar.setProgress(test.getPercentageOfCompletion()); 
    } 

    @Override 
    public void onClick(View view) { 
     TestSeriesTest series = getItem(getLayoutPosition()); 
     mListener.onTestSeriesTestClicked(series); 
    } 
} 

并点击听者类是

public interface TestSeriesTestClickListener { 
public void onTestSeriesTestClicked(TestSeriesTest mockTest);} 
+0

其中是回收站视图的点击侦听器。 –

+0

它是另一个接口 –

+0

现在检查它是否添加 –

回答

0

使名为RecyclerItemClickListener类:

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.view.View; 

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { 
private OnItemClickListener mListener; 

public interface OnItemClickListener { 
    public void onItemClick(View view, int position); 
} 

GestureDetector mGestureDetector; 

public RecyclerItemClickListener(Context context, OnItemClickListener listener) { 
    mListener = listener; 
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
     @Override 
     public boolean onSingleTapUp(MotionEvent e) { 
      return true; 
     } 
    }); 
} 

@Override 
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { 
    View childView = view.findChildViewUnder(e.getX(), e.getY()); 
    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { 
     mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); 
    } 
    return false; 
} 

@Override 
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { 
} 
} 

,然后将下面的代码添加到您的活动:

recyclerView.addOnItemTouchListener( 
new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() { 
    @Override public void onItemClick(View view, int position) { 
    // TODO Handle item click 
    } 
}) 
); 

即将我是全部。你可以输入OnItemClick你的代码,你还可以得到项目位置

+0

比这更好的方法吗? –

+0

我想这很简单..如果不告诉我你到底想做什么,我会相应地修改它 –

0

RecyclerItemClickListener

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { 
private OnItemClickListener mListener; 

public interface OnItemClickListener { 
    public void onItemClick(View view, int position); 
} 

GestureDetector mGestureDetector; 

public RecyclerItemClickListener(Context context, OnItemClickListener listener) { 
    mListener = listener; 
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
     @Override 
     public boolean onSingleTapUp(MotionEvent e) { 
      return true; 
     } 
    }); 
} 

@Override 
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { 
    View childView = view.findChildViewUnder(e.getX(), e.getY()); 
    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { 
     mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); 
    } 
    return false; 
} 

@Override 
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { 
} 
} 

ClickListener

recyclerView.addOnItemTouchListener( 
new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() { 
    @Override public void onItemClick(View view, int position) { 
    // TODO Handle item click 
    } 
}) 
); 
+0

有没有比这更好的方法? –

+0

这是我曾经使用过的最好的方法 –

+0

接受&upvote这个答案,如果你通过这个找到解决方案。 –

0

我的性格是,你subjectBubbles必须包含可点击物品里面这会阻止点击事件传播到父视图。
检查您的BubbleAdapter以查看您是否有任何点击事件。

+0

没有点击事件 –

+0

然后发布'BubbleAdapter'的代码。 –