2016-03-02 71 views
0

我使用最新更新的支持库创建了底部工作表。基本上,只要长时间点击回收站视图中的项目,就会显示底部工作表(包含包含列表视图的线性布局)。但是每当我点击listview中的项目时都不会发生任何事情。我添加了吐司,当我点击表单项目时,它永远不会被触发。有任何想法吗?提前致谢!ListView OnItemClickListener不在底部工作表中触发

这里是ListView控件初始化方法:

public void initSheet() { 
     bottomSheet = findViewById(R.id.list_sheet); 
     ListAdapter adapter = new ListAdapter(this, R.layout.custom_sheet_row, getSheetInfo(), "Sheet"); 
     list = (ListView) findViewById(R.id.list_sheet_list); 
     list.setAdapter(adapter); 
     behavior = BottomSheetBehavior.from(bottomSheet); 
     behavior.setHideable(true); 
    } 

这里是recyclerview长按:

@Override 
      public void onLongClick(View view, int position) { 
       final String itemText = ((TextView) view.findViewById(R.id.textRow)).getText().toString(); 
       list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         Toast.makeText(ListActivity.this, "sdjakfjs", Toast.LENGTH_SHORT).show(); 
         switch (position) { 
          case 0: 
           Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
           sharingIntent.setType("text/plain"); 
           sharingIntent.putExtra(Intent.EXTRA_TEXT, itemText); 
           startActivity(Intent.createChooser(sharingIntent, "Share the item")); 
           break; 
          case 1: 
           final ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
           clipboard.setPrimaryClip(ClipData.newPlainText("New", itemText)); 
           break; 
          case 2: 
           editText(itemText, position); 
           break; 
          case 3: 
           listAdapter.deleteItem(position); 
           break; 
         } 
         behavior.setState(BottomSheetBehavior.STATE_HIDDEN); 
        } 
       }); 
       behavior.setState(BottomSheetBehavior.STATE_EXPANDED); 
      } 
+0

请确定您使用的是什么,列表视图或回收站视图。你的代码是列表视图,在某些地方你使用回收视图 – theLazyFinder

+0

就像我在op中说过的,我有一个recyclerview作为主应用,但在底部列表中有一个列表视图 –

回答

0

尝试。
实现自定义clicklistener它将完美地工作。

// creating interface to handle clicks for Recycler view items 
public interface ClickListener 
{ 
    void onClick(View view,int position); 
    void onLongClick(View view,int position); 
} 
public static class CustomRecyclerTouchListener implements RecyclerView.OnItemTouchListener 
{ 
    private GestureDetector gestureDetector; 
    private MainActivity.ClickListener clickListener; 
    public CustomRecyclerTouchListener(Context context,final RecyclerView recyclerView,final MainActivity.ClickListener 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.getChildPosition(child)); 
       } 
      } 
     }); 
    } 
    @Override 
    public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) { 
     View child=recyclerView.findChildViewUnder(motionEvent.getX(),motionEvent.getY()); 
     if(child!=null && clickListener!=null && gestureDetector.onTouchEvent(motionEvent)) 
     { 
      clickListener.onClick(child,recyclerView.getChildPosition(child)); 
     } 
     return false; 
    } 
    @Override 
    public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) { 
    } 
    @Override 
    public void onRequestDisallowInterceptTouchEvent(boolean b) { 
    } 
} 
} 

然后像这样执行。

recyclerView.addOnItemTouchListener(new CustomRecyclerTouchListener(getApplicationContext(), recyclerView, new ClickListener() { 
     @Override 
     public void onClick(View view, int position) { 
      User user=users.get(position); 
      Toast.makeText(MainActivity.this,user.getName()+" is clicked",Toast.LENGTH_SHORT).show(); 
     } 
     @Override 
     public void onLongClick(View view, int position) { 
      User user=users.get(position); 
      Toast.makeText(MainActivity.this,user.getName()+" is long clicked",Toast.LENGTH_SHORT).show(); 
     } 
    })); 

更多详细信息请点击这里: - http://coderzpassion.com/android-working-with-recycler-view/

+0

我已经在使用这个用于recyclerview。我遇到的问题是与listview。对不起,如果我不清楚。基本上,我在底部表单里面有一个listview,不管出于什么原因都没有收到点击命令。 –

0

好吧,我落得这样做创建4个textviews线性布局的内部,而不是使用列表视图。然后,我只是添加了一个onclick的所有文字浏览器来完成他们各自的命令