2017-05-21 34 views
0

我正在開發Android應用程序。當我在回收站視圖中點擊一個項目時,我遇到了一些打開彈出式菜單的問題。Recycler Android中未查看點擊

Show.java(包含Recycler視圖的活動)。 mRecycler是與RecyclerView關聯的對象。

mRecycler.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), mRecycler, new RecyclerViewClickListener() { 
     @Override 
     public void onClick(View view, final int position) { 
      PopupMenu menu = new PopupMenu(Show.this,mRecycler); 
      MenuItem itemView = (MenuItem) findViewById(R.id.three); 
      if(method.equals("Completed")) 
       itemView.setTitle("Mark as imcomplete"); 
      menu.getMenuInflater().inflate(R.menu.menu_popup,menu.getMenu()); 

      menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ 
       public boolean onMenuItemClick(MenuItem item){ 
        int id=item.getItemId(); 
        switch (id){ 
         case R.id.one: 
          Intent intent = new Intent(Show.this,Add.class); 
          intent.putExtra("Task",tasks.get(position)); 
          startActivity(intent); 
          finish(); 
          startActivity(getIntent()); 
          break; 
         case R.id.two: 
          deleteRecord(position); 
          break; 
         case R.id.three: 
          toggleComplete(position); 
        } 
        return true; 
       } 
      }); 

     } 

     @Override 
     public void onLongClick(View view, int position) { 
      onClick(view,position); 
     } 
    })); 

代碼片段RecyclerView的XML

<android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentStart="true" 
     android:scrollbars="vertical" 
     android:clickable="true" 
     android:contextClickable="true" 
     android:longClickable="true" /> 

RecyclerViewClickListener.java

public interface RecyclerViewClickListener { 
    void onClick(View view,int position); 
    void onLongClick(View view,int position); 
} 

RecyclerTouchListener.java - 類實現OnItemTouchListener

public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener{ 
    private GestureDetector gestureDetector; 
    private RecyclerViewClickListener clickListener; 

    public RecyclerTouchListener (Context context,final RecyclerView recyclerView, 
            final RecyclerViewClickListener clickListener){ 
     this.clickListener = clickListener; 
     gestureDetector = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener(){ 
      @Override 
      public boolean onSingleTapUp(MotionEvent e){ 
       return true; 
      } 

      @Override 
      public void onLongPress(MotionEvent e){ 
       View child = recyclerView.findChildViewUnder(e.getX(),e.getY()); 
       if (child != null && clickListener!=null) 
        clickListener.onLongClick(child,recyclerView.getChildAdapterPosition(child)); 
      } 

     }); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e){ 
     View child = rv.findChildViewUnder(e.getX(),e.getY()); 
     if (child !=null && clickListener !=null && gestureDetector.onTouchEvent(e)) 
      clickListener.onClick(child,rv.getChildAdapterPosition(child)); 
     return false; 
    } 

    @Override 
    public void onTouchEvent(RecyclerView rv,MotionEvent e){} 

    @Override 
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntecept){} 
} 

諾斯當我點擊RecyclerView上的一個項目時會發生。 Android系統甚至不承認它被點擊。請檢查我的代碼有什麼問題。

回答

1

請你試試這個

mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), mRecyclerView, new ClickListener() { 
      @Override 
      public void onClick(View view, int position) { 
       menuCardIndex = position; 
       PopupMenu popupMenu = new PopupMenu(Show.this, view); 
       popupMenu.setOnMenuItemClickListener(Show.this); 
       popupMenu.inflate(R.menu.menu_popup); 
       popupMenu.show(); 
      } 

      @Override 
      public void onLongClick(View view, int position) { 
      } 
     })); 

@Override 
public boolean onMenuItemClick(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.one: 
      Your_First_Operation; 
      return true; 
     case R.id.two: 
      Your_Second_Operation; 
      return true 
     case R.id.three: 
      Your_Third_Operation; 
      return true 
    } 
    return false; 
} 

終於把這個你的活動

public class Show extends AppCompactActivity implements PopupMenu.OnMenuItemClickListener 

希望通過這種方式,你可以聽你的點擊收聽。如果它工作正常,你可以設置你的邏輯。

0

如果您RecyclerView項目在他們的XML文件「點擊」的孩子,儘量財產申報:

android:clickable="false" 

離開點擊真正只在您的列表項的父親

如果這不是你的情況,或者你絕對需要列表項中的可點擊元素,還有另一種解決方案。


如果您使用的是RecyclerView,您應該在您的代碼中的某處實施RecyclerView適配器。

OnBindViewHolder方法,試試下面的代碼:

@Override 
public void onBindViewHolder(final ViewHolder holder, int position) { 

    //YOUR CODE ... 

    holder.itemView.setOnTouchListener(yourOnTouchListener); 

    //MORE CODE ... 
} 

這將在生成的列表中的瞬間OnTouchListener設定爲單ItemView控件。

我希望我的回答很有幫助並且足夠容易理解。