【问题标题】:Android EditText field doesn't allow user input in ListViewAndroid EditText 字段不允许用户在 ListView 中输入
【发布时间】:2016-07-04 08:49:10
【问题描述】:

我在互联网上搜索了很多帖子来解决我的问题,但没有人帮助我,所以我尝试了一个新问题。 我有一个带有 ListView 的 Activity,每行包含两个 TextView(pizza_name、pizza_price)一个 EditText(pizza_quantity)和两个按钮(add_pizza、remove_pizza),我使用自定义适配器来填充 ListView。

我已经实现了使按钮正常工作的所有方法,我的问题是 Pizza_quantity EditText 视图: 我希望显示的数字可以通过按钮和用户输入进行编辑,当用户点击它时,键盘会出现,但 EditText 的内容不会改变。 以下是代码:

single_row_layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
>


<TextView
    android:id="@+id/pizzaname"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:paddingLeft="8dp"
    android:textSize="18sp"
    android:textStyle="bold"
    android:hint="nome_pizza"
    android:layout_centerVertical="true"/>

<TextView
    android:id="@+id/pizzaprice"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@+id/editTextQuantity"
    android:textSize="18sp"
    android:textStyle="bold"
    android:hint="prezzo"
    android:layout_centerVertical="true"
    />

        <Button
            android:layout_width="50sp"
            android:layout_height="wrap_content"
            android:id="@+id/ib_addnew"
            android:layout_gravity="bottom"
            android:hint="+"
            android:layout_toLeftOf="@+id/ib_remove"
            android:background="#00ffffff"
            />

        <EditText
            android:layout_width="50dp"
            android:layout_height="48dp"
            android:text="0"
            android:id="@+id/editTextQuantity"
            android:layout_toLeftOf="@+id/ib_addnew"
            android:textAlignment="center"
            android:inputType="numberDecimal" />

        <Button
            android:layout_width="50sp"
            android:layout_height="wrap_content"
            android:id="@+id/ib_remove"
            android:hint="-"
            android:layout_marginRight="5sp"
            android:layout_alignParentRight="true"
            android:background="#00ffffff"

            />

</RelativeLayout>

我设置适配器的主要活动(称为 MenuActivity)中的代码

创建:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.menu_layout);
    Intent i = getIntent();

    order = new Order();
    Server server = StubServer.getIstance(this);

    pizzaNames = server.getPizzaNames();
    pizzaPrices = server.getPizzaPrices();

    if(i.getBooleanExtra("session",false)){
        order=(Order)i.getSerializableExtra("order");
    }

    listView = (ListView) findViewById(R.id.mylist);
    listAdapter = new ListAdapter(this, pizzaNames, pizzaPrices,order.pizzaQuantity);

    listView.setAdapter(listAdapter);
    listAdapter.setCustomButtonListener(this);


}

这是 ListAdapter

构造函数:

public ListAdapter(Context context, String[] listViewItems,String[] prices,ArrayList<Integer> q) {
    this.context = context;
    this.listViewItems = listViewItems;
    this.prices=prices;
    this.quantity=q;

    if(quantity.size()==0) {
        for (int i = 0; i < listViewItems.length; i++) {
           quantity.add(0);
        }
    }
}

getView 方法:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View row;
    final ListViewHolder listViewHolder;
    if(convertView == null)
    {
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = layoutInflater.inflate(R.layout.activity_custom_listview,parent,false);
        listViewHolder = new ListViewHolder();
        listViewHolder.pizzaName = (TextView) row.findViewById(R.id.pizzaname);
        listViewHolder.price=(TextView) row.findViewById(R.id.pizzaprice);
        listViewHolder.btnPlus = (Button) row.findViewById(R.id.ib_addnew);
        listViewHolder.edTextQuantity = (EditText) row.findViewById(R.id.editTextQuantity);
        listViewHolder.btnMinus = (Button) row.findViewById(R.id.ib_remove);
        row.setTag(listViewHolder);
    }
    else
    {
        row=convertView;
        listViewHolder= (ListViewHolder) row.getTag();
    }


    try{
        //HashMap<String, String> map = listQuantity.get(position);
        //quantity[position]+""

        listViewHolder.edTextQuantity.setText(quantity.get(position)+"");

        //holder.item_name.setText(map.get("name"));
        //holder.order_qty.setText(map.get("quantity"));

        //Log.v("Available or not", ""+map.get("available"));


    }catch(Exception e){
        e.printStackTrace();
    }

    listViewHolder.btnPlus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (customButtonListener != null) {
                customButtonListener.onButtonClickListener(position, listViewHolder.edTextQuantity, 1);
                int tmp=quantity.get(position);
                quantity.set(position,tmp+1);
                //quantity[position]=[position]+1;
            }

        }
    });
    //listViewHolder.edTextQuantity.setText("0");
    listViewHolder.btnMinus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (customButtonListener != null) {
                customButtonListener.onButtonClickListener(position,listViewHolder.edTextQuantity,-1);
                if(quantity.get(position)>0)
                    quantity.set(position, quantity.get(position) - 1);
            }
        }
    });
    listViewHolder.pizzaName.setText(listViewItems[position]);
    listViewHolder.price.setText(prices[position]);
    if(position%2==0){
        row.setBackgroundColor(Color.LTGRAY);
    }
    return row;
}

最后,这里有两张应用截图

Just started activity

after tap on the first row EditText field

提前谢谢你。

【问题讨论】:

    标签: android listview android-edittext


    【解决方案1】:

    在您的适配器更改代码如下

      try{
    
    
        listViewHolder.edTextQuantity.setText(String.valueOf(quantity.get(position)));
    
        //holder.item_name.setText(map.get("name"));
        //holder.order_qty.setText(map.get("quantity"));
    
        //Log.v("Available or not", ""+map.get("available"));
    
    
    }catch(Exception e){
        e.printStackTrace();
    }
    

    listViewHolder.btnPlus.setOnClickListener(new View.OnClickListener()
    
    {
        @Override
        public void onClick (View v){
        if (customButtonListener != null) {
            customButtonListener.onButtonClickListener(position, listViewHolder.edTextQuantity, 1);
            int tmp = Integer.parseInt(listViewHolder.edTextQuantity.gettext().tostring())
            quantity.set(position, tmp + 1);
            //quantity[position]=[position]+1;
            listViewHolder.edTextQuantity.settext(String.valueOf(temp + 1));
        }
    
    }
    }
    
    );
    //listViewHolder.edTextQuantity.setText("0");
    listViewHolder.btnMinus.setOnClickListener(new View.OnClickListener()
    
    {
        @Override
        public void onClick (View v){
        if (customButtonListener != null) {
            customButtonListener.onButtonClickListener(position, listViewHolder.edTextQuantity, -1);
            if (quantity.get(position) > 0)
                int tmp = Integer.parseInt(listViewHolder.edTextQuantity.gettext().tostring())
            quantity.set(position, tmp - 1);
            //quantity[position]=[position]+1;
            listViewHolder.edTextQuantity.settext(String.valueOf(temp - 1));
        }
    }
    }
    
    );
    listViewHolder.pizzaName.setText(listViewItems[position]);
    listViewHolder.price.setText(prices[position]);
    if(position%2==0)
    
    {
        row.setBackgroundColor(Color.LTGRAY);
    }
    

    【讨论】:

    • 老实说,我不明白您的更改,添加和删除按钮工作正常,我的问题是我还想允许用户通过键盘输入,但 hte 键盘不发送密钥为了完整性,我点击了:当我点击 EditText(我的示例中的第一个)时出现第二个图像,出现键盘,但它不起作用。
    • 你能把你的activity_custom_listview.xml文件放到适配器吗
    • 它是答案中的第一个代码sn-p,标记为single_row_layout
    • android:editable="true" android:clickable="true" 试试这个
    • editable 在 EditText 中默认为 true,可点击并不能解决问题,无论如何,当我点击 EditText 时,会发生从 image1 到 image2 的事务,所以我认为 EditText 已经是可编辑的。跨度>
    猜你喜欢
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    相关资源
    最近更新 更多