如何设置成员元素可聚焦在列表视图中?

时间:2017-08-10 10:48:23

标签: android listview focusable

我有一个自定义列表视图,里面有3个editTexts和一个按钮。

默认情况下,我不希望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的新手。

3 个答案:

答案 0 :(得分:1)

KeyListener获取EditText的{​​{1}}值并存储在editText.getKeyListener()类型变量中,该变量将包含可编辑的属性值:

KeyListener

KeyListener variable; variable = editText.getKeyListener(); 的可编辑属性设置为EditText

false

现在将edittext.setKeyListener(null); 的可编辑属性设置为EditText

true

注意:在XML中,editText.setKeyListener(variable); 的默认可编辑属性应为EditText

答案 1 :(得分:1)

尝试根据条件在true(启用)/ false(禁用)值下设置两个属性:

启用EditText输入:

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

禁用EditText输入:

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

答案 2 :(得分:0)

尝试使用此按钮启用按钮。

   viewHolder.edit_button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            //lv.getChildAt(position).setFocusable(true);
            viewHolder.product_nameET.setEnabled(true);

        }
    });