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之后,它的工作就是这样。重新行,它不工作。(当我删除软键盘,然后单击编辑文本时出现问题)使用教程链接:或