【问题标题】:How to set member elements focusable in a listview?如何在列表视图中设置可聚焦的成员元素?
【发布时间】:2018-01-18 13:53:24
【问题描述】:

我有一个自定义列表视图,里面有 3 个编辑文本和一个按钮。

默认情况下,我不希望 editTexts 可编辑,所以我设置了

android:focusable="true"

但是在某些时候,我希望单击该按钮时应该使它们可编辑

所以在 getView(我正在使用自定义适配器)中,我将 onClick 侦听器设置为:

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {


        Log.d("Reached: ","Getview");





        ViewHolder viewHolder = null;

        if (convertView == null) {
            LayoutInflater inflator = LayoutInflater.from(getContext());
            convertView = inflator.inflate(R.layout.list_view, null);
            viewHolder = new ViewHolder();
            viewHolder.product_nameET= (EditText) convertView.findViewById(R.id.product_nameET);
            viewHolder.priceET= (EditText) convertView.findViewById(R.id.priceET);
            viewHolder.quantity_availableET= (EditText) convertView.findViewById(R.id.quantity_availableET);
            viewHolder.edit_button= (Button) convertView.findViewById(R.id.edit_rowButton);
            //viewHolder.product_nameET.setFocusable(true);
             final ViewHolder vh=viewHolder;
            viewHolder.edit_button.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {

                    //lv.getChildAt(position).setFocusable(true);
                    vh.product_nameET.setFocusable(true);//////This line here has no effect


                }
            });


            convertView.setTag(viewHolder);
            convertView.setTag(R.id.product_nameET, viewHolder.product_nameET);
            convertView.setTag(R.id.priceET, viewHolder.priceET);
            convertView.setTag(R.id.quantity_availableET, viewHolder.quantity_availableET);
            convertView.setTag(R.id.edit_rowButton, viewHolder.edit_button);


        }
        else {
            viewHolder = (ViewHolder) convertView.getTag();
        }



        viewHolder.product_nameET.setText(product_namesList.get(position));
        viewHolder.priceET.setText(priceList.get(position));
        viewHolder.quantity_availableET.setText(quantity_availableList.get(position));






        return convertView;



    }

但这没有任何效果。请帮助我是 android 新手。

【问题讨论】:

  • 你试过同时使用 setFocusable 和 setFocusableInTouchMode 吗?
  • @HareshChhelana 成功了
  • 太好了,我已经发布了答案,如果它解决了您的问题,请检查并接受并投票,这样它会帮助其他人。

标签: android listview focusable


【解决方案1】:

尝试根据条件将以下两个属性设置为 true(enable)/false(disable) 值:

为输入启用 EditText:

vh.product_nameET.setFocusable(true);
vh.product_nameET.setFocusableInTouchMode(true);

对于输入禁用 EditText:

vh.product_nameET.setFocusable(false);
vh.product_nameET.setFocusableInTouchMode(false);

【讨论】:

    【解决方案2】:

    通过editText.getKeyListener()获取EditTextKeyListener值并存储在KeyListener类型变量中,该变量将包含可编辑的属性值:

    KeyListener variable;
    variable = editText.getKeyListener(); 
    

    EditText的可编辑属性设置为false为:

    edittext.setKeyListener(null);
    

    现在将EditText 的可编辑属性设置为true 为:

    editText.setKeyListener(variable);  
    

    注意:在 XML 中,EditText 的默认可编辑属性应为 true

    【讨论】:

    • 这给了我一个空指针异常,因为当列表视图中没有项目时,视图为空。
    • 是的,很明显,没有edittext它无法获得参考
    • 你必须检查空异常
    【解决方案3】:

    试试这个你需要启用的按钮。

       viewHolder.edit_button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
    
                //lv.getChildAt(position).setFocusable(true);
                viewHolder.product_nameET.setEnabled(true);
    
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      相关资源
      最近更新 更多