【问题标题】:Listview containing edittext包含编辑文本的列表视图
【发布时间】:2014-02-17 07:53:21
【问题描述】:

我有一个listview,它的行由一些编辑文本组成。我的问题是它的值在滚动时会自动改变。我尝试了很多方法,但没有一个有效。有没有与此相关的例子?有人请帮帮我

public class MainActivity extends Activity {

private ListView myList;
private CustomAdapter myAdapter;
Context context;
private String[] guess = new String[20];

ArrayList<String> list_id = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    for(int i=0;i<19;i++){
        list_id.add(""+i);
        guess[i] = i+"";
    }

    myList = (ListView) findViewById(R.id.listView1);
    myList.setItemsCanFocus(true);

    initList();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
public void initList()
{
    ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, R.id.textView1, guess)
    {

        @Override
        public View getView(final int position, View convertView, ViewGroup parent)
        {
            if (convertView == null)
            {
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, null);
            }

            final String theData = getItem(position);
            final EditText editText = (EditText) convertView.findViewById(R.id.editText1);
            //editText.setText(theData);
            editText.setText(guess[position]);
            editText.addTextChangedListener(
                    new MyTextWatcher(position)
                    );

            return convertView;
        }
        };

        myList.setAdapter(listAdapter);
}

class MyTextWatcher implements TextWatcher {
    private int position;

    public MyTextWatcher(int position) {
        this.position = position;
    }

    public void afterTextChanged(Editable s) {
        guess[position] = s.toString();
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        // TODO Auto-generated method stub

    }

    // other methods are created, but empty
}

}

【问题讨论】:

  • 发布您尝试过的代码,以便解决问题。
  • if-else 放入适配器的 getView() 中,如果可用,则设置为 edittext 的值,否则只需设置空文本。
  • 仍然无法正常工作:(
  • 你总是有 20 行吗?如果是这样,也许考虑不使用 ListView,因为 ListView 将回收行,并且当行被回收时可能难以保留 EditTexts 中的内容。
  • No..我只是用 20 来测试它。它会有所不同。

标签: android android-listview android-edittext android-arrayadapter


【解决方案1】:

最后我自己解决了这个问题。问题是因为我的 xml 文件。对于每一行,我使用了两个编辑文本,一个具有输入类型“numberDecimal”,另一个具有“文本”。有问题。当我将两种输入类型都更改为“NumberDecimal”时,它起作用了。我不知道为什么。对于输入文本,我将 edittext 输入类型之一更改为“textvisiblepassword”。

【讨论】:

    【解决方案2】:

    创建 atom_pay_list_item.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal" >
    
        <EditText
            android:id="@+id/atomPay_name"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="2"
            android:gravity="center_vertical"
            android:hint="@string/EnterPays_atomPay_nameHint"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    
        <EditText
            android:id="@+id/atomPay_value"
            android:layout_width="0sp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:inputType="numberDecimal"
            android:text="@string/EnterPays_TextView_ZeroValue"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    
        <ImageButton
            android:id="@+id/atomPay_removePay"
            android:layout_width="@dimen/width_button"
            android:layout_height="fill_parent"
            android:contentDescription="@string/emptyText"
            android:onClick="removeAtomPayOnClickHandler"
            android:src="@android:drawable/ic_menu_delete" />
    </LinearLayout>
    

    创建列表项适配器:

    public class AtomPayListAdapter extends ArrayAdapter<AtomPayment> {
    
        private List<AtomPayment> items;
        private int layoutResourceId;
        private Context context;
    
        public AtomPayListAdapter(Context context, int layoutResourceId, List<AtomPayment> items) {
            super(context, layoutResourceId, items);
            this.layoutResourceId = layoutResourceId;
            this.context = context;
            this.items = items;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = convertView;
            AtomPaymentHolder holder = null;
    
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
    
            holder = new AtomPaymentHolder();
            holder.atomPayment = items.get(position);
            holder.removePaymentButton = (ImageButton)row.findViewById(R.id.atomPay_removePay);
            holder.removePaymentButton.setTag(holder.atomPayment);
    
            holder.name = (TextView)row.findViewById(R.id.atomPay_name);
            holder.value = (TextView)row.findViewById(R.id.atomPay_value);
    
            row.setTag(holder);
    
            setupItem(holder);
            return row;
        }
    
        private void setupItem(AtomPaymentHolder holder) {
            holder.name.setText(holder.atomPayment.getName());
            holder.value.setText(String.valueOf(holder.atomPayment.getValue()));
        }
    
        public static class AtomPaymentHolder {
            AtomPayment atomPayment;
            TextView name;
            TextView value;
            ImageButton removePaymentButton;
        }
    }
    

    在您的活动布局 xml 文件中添加 ListView:

    您可以使用THISTHIS 来执行此操作。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多