首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过添加按钮,ListView setOnItemClickListener不工作

通过添加按钮,ListView setOnItemClickListener不工作
EN

Stack Overflow用户
提问于 2011-07-15 14:19:14
回答 12查看 91.6K关注 0票数 93

我有一个列表视图,每一行都有文本和按钮,列表视图setOnItemClickListener()不起作用。是否可以不同地处理项目单击和按钮单击事件(项目单击应该调用ActivityA,按钮单击应该调用ActivityB)。有没有人有解决方案

代码语言:javascript
复制
    private ArrayList<String> userIDArr = null;
    private ArrayList<String> userNameArr = null;
    private DatabaseHelper dbHelper = null;
    private ListView userListView=null; 


    public void onCreate(Bundle savedInstanceState) 
        {
          super.onCreate(savedInstanceState);         
          setContentView(R.layout.list_view);         
          dbHelper = new DatabaseHelper(this.getApplicationContext());        
          Map<String,ArrayList<String>> displayMap = dbHelper.getUserListToDisplay();
          userIDArr = displayMap.get("UserID");
          userNameArr = displayMap.get("FirstName1");           


          userListView = (ListView) findViewById(R.id.listView2);
          userListView.setAdapter(new UserListAdapter(this,userIDArr));


          userListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

                  Toast.makeText(usersListActivity.this,
                            "Item in position " + position + " clicked", Toast.LENGTH_LONG).show();
              }
            });
     }


    public class UserListAdapter extends ArrayAdapter<String>
    {
        Activity context;
        public UserListAdapter(Activity context, ArrayList<String> names) {
            super(context, R.layout.list_item, names);
            this.context = context;
        }
        private class ViewHolder {
            public TextView UserNameAndID;
            public TextView Description;
            public Button  UploadBtn;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            View rowView = convertView;
            if (rowView == null) {
                LayoutInflater inflater = context.getLayoutInflater();
                rowView = inflater.inflate(R.layout.list_item, null, true);
                holder = new ViewHolder();
                holder.UserNameAndID = (TextView) rowView.findViewById(R.id.User_detailsTxt);
                holder.Description = (TextView) rowView.findViewById(R.id.User_status);
                holder.UploadBtn = (Button) rowView.findViewById(R.id.uploadbutton);
                holder.UploadBtn.setOnClickListener(new View.OnClickListener() {  

                        public void onClick(View v) {  
                        Toast.makeText(usersListActivity.this," Button clicked",Toast.LENGTH_SHORT).show();
                        }   
                    }); 
                    rowView.setTag(holder);
            } else {
                holder = (ViewHolder) rowView.getTag();
            }
            String s = userNameArr.get(position)+","+userIDArr.get(position);
            holder.UserNameAndID.setText(s);
            holder.Description.setText("U r in middle");
            return rowView;
        }
    }
}`
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2011-07-15 15:07:04

试着像这样设置按钮(或任何其他你想要处理的视图,点击列表项):

代码语言:javascript
复制
android:focusable="false"
android:focusableInTouchMode="false"
票数 261
EN

Stack Overflow用户

发布于 2012-12-11 18:07:00

有时列表仍然不能使Click Listener通过。在这种情况下,您可能需要再添加一个属性。

代码语言:javascript
复制
android:descendantFocusability="blocksDescendants" 

这个属性必须添加到您提供了ListView元素的XML的最上面的布局中。

票数 121
EN

Stack Overflow用户

发布于 2012-01-16 17:26:59

如果列表视图中有活动视图/可聚焦视图,则会禁用onItemClickListener...您可以尝试通过将:android:focusable="false"添加到任何通常可聚焦的视图来使其不可聚焦。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6703390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档