Android 包含edittext的Listview

Android 包含edittext的Listview,android,android-listview,android-edittext,android-arrayadapter,Android,Android Listview,Android Edittext,Android Arrayadapter,我有一个列表视图,它的行由一些编辑文本组成。我的问题是它的值在滚动时自动改变。我试过很多方法,但都不管用。有没有与此相关的例子?谁能帮帮我 public class MainActivity extends Activity { private ListView myList; private CustomAdapter myAdapter; Context context; private String[] guess = new String[20]; ArrayList<Stri

我有一个列表视图,它的行由一些编辑文本组成。我的问题是它的值在滚动时自动改变。我试过很多方法,但都不管用。有没有与此相关的例子?谁能帮帮我

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
}

}
公共类MainActivity扩展活动{
私有列表视图myList;
私有自定义适配器myAdapter;
语境;
私有字符串[]猜测=新字符串[20];
ArrayList_id=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

对于(int i=0;i创建atom\u pay\u list\u 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;
    }
}

公共类AtomPayListAdapter扩展了ArrayAdapter或执行此操作。

最后我自己解决了这个问题。问题是因为我的xml文件。对于每一行,我都使用了两个EditText,一个输入类型为“numberDecimal”,另一个输入类型为“text”。当我将两个输入类型都更改为“numberDecimal”时,出现了问题它起作用了。我不知道为什么。为了输入文本,我将其中一个edittext inputtype更改为“textvisiblepassword”。

发布您尝试过的代码,以便解决问题。将if-else放入适配器的
getView()
中,该适配器设置为值为edittext(如果可用),否则只需设置空文本。仍然不起作用:(如果这样),可能会考虑不使用ListVIEW,因为ListVIEW将循环行,并且当行被回收时,很难保存编辑文本中的内容。不,我只使用了20来测试它。它会变化。代码中的错误也是……我不能在编辑文本上键入任何内容。实际上,在添加MO之后,它的工作就是这样。重新行,它不工作。(当我删除软键盘,然后单击编辑文本时出现问题)使用教程链接:或