【问题标题】:Unable to click entire row in custom Listview无法单击自定义列表视图中的整行
【发布时间】:2014-09-08 16:43:23
【问题描述】:

我正在创建一个自定义 ListView,其中有两行相同的行,其中一个不同,其中包含 Spinner。问题是带有 Spinner 的行不可点击。我只能点击 Spinner。这是我的适配器:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        int theType = getItemViewType(position);
        if (convertView == null) {
            holder = new ViewHolder();
            if (theType == 0) {
                convertView = inflat.inflate(R.layout.row_item0, parent, false);
                holder.textView = (TextView) convertView
                        .findViewById(R.id.text);
                holder.sp = (Spinner) convertView.findViewById(R.id.sp);

            } else if (theType == 1) {
                convertView = inflat.inflate(R.layout.row_item1, null);
                holder.textView = (TextView) convertView
                        .findViewById(R.id.text);
            }

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        String it = items.get(position);
        if (it != null) {
            if (theType == 0) {
                holder.textView.setText(it);
                holder.sp.setAdapter(new CategorySpinnerAdapter(
                        getApplicationContext(),
                        R.layout.item_spinner_category, Data.lose_weight_type));
                holder.sp
                        .setOnItemSelectedListener(new OnItemSelectedListener() {

                            @Override
                            public void onItemSelected(AdapterView<?> parent,
                                    View view, int position, long id) {
                                Data.user
                                        .setLose_weight_type(Data.lose_weight_type
                                                .get(position));
                                Data.user.setGoal(Data.goals.get(0));
                            }

                            @Override
                            public void onNothingSelected(AdapterView<?> arg0) {
                                // TODO Auto-generated method stub

                            }
                        });
            } else if (theType == 1) {
                holder.textView.setText(it);
            }

        }
        return convertView;
    }

【问题讨论】:

    标签: android android-listview android-spinner


    【解决方案1】:

    您需要在自定义列表视图的布局文件中添加android:descendantFocusability="blocksDescendants",或者在每个视图中添加android:focusable="false"。如果自定义列表视图中的任何视图具有可聚焦视图,则 onitemclick 不起作用。

    【讨论】:

    • 哇!我不知道 android:descendantFocusability 属性,但是这个属性可以解决问题!相反,我总是在代码中使用 setFocusable(false),因为我经历过 focusable 属性不起作用。
    【解决方案2】:

    如果适配器中包含任何可点击的小部件,如图像按钮、微调器、按钮等,则列表视图项不可点击。

    您可以做一件事,您可以在适配器类本身的转换视图上制作点击监听器。这可能不是准确的方法,但这在这种情况下非常有效

    【讨论】:

    • 我不明白。适配器中转换视图上的点击监听器是什么意思?
    • 它成功了,但我不明白为什么 Android 开发人员还没有解决这个问题。谢谢
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多