【发布时间】:2011-12-28 12:59:02
【问题描述】:
对不起,我无法发布 cmets 以获得答案,所以我必须在这里写自己的
我需要从自定义 ListView(由 EditText 和 ImageView 组成)中获取字符串数据。 这是我的代码:
-
首先,我声明我自己的 ArrayList 副本
private ArrayList<EditText> m_edit = null; -
其次,我在我的 Activity 的 onCreate 方法中初始化它
public void onCreate(Bundle savedInstanceState) { ...
m_edit = new ArrayList<EditText>(); ... -
第三,我用 EditText 副本填充我的 ArrayList,然后使用 ArrayAdapter 将它们添加到 ListView
fieldAddButton.setOnClickListener(new OnClickListener() { public void onClick(View view){ EditText et = new EditText(AddCategory.this); m_edit.add(et); m_adapter.notifyDataSetChanged(); } }); -
第四,我想获取自定义 ListView 中任何项目的 EditText 值。所以我做了这样的事情:
for (int i = 0;i<m_edit.size();i++){ _string = m_edit.get(i).getText().toString(); }
还有一个问题:结果总是""
我做错了什么?
我的课源代码
import android.app.Activity;
import android.widget.Toast;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.EditText;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import android.widget.ArrayAdapter;
import android.view.View.OnClickListener;
import android.view.*;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
public class AddCategory extends Activity {
private ArrayList<EditText> m_edit = null;
private EditAdapter m_adapter;
private EditText categoryName;
private MyDbAdapter dbAdapter;
private Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.addcategory);
final Button categoryAddButton = (Button)findViewById(R.id.CategoryAddButton);
final Button fieldAddButton = (Button)findViewById(R.id.FieldAddButton);
final ListView fieldList = (ListView)findViewById(R.id.CategoryFieldList);
categoryName = (EditText)findViewById(R.id.CategoryNameEdit);
m_edit = new ArrayList<EditText>();
this.m_adapter = new EditAdapter (this, R.layout.categoryfieldlayout, m_edit);
fieldList.setAdapter(m_adapter);
dbAdapter = new MyDbAdapter(this);
context = getApplicationContext();
dbAdapter.open();
fieldAddButton.setOnClickListener(new OnClickListener()
{
public void onClick(View view){
EditText et = new EditText(AddCategory.this);
m_edit.add(et);
m_adapter.notifyDataSetChanged();
}
});
categoryAddButton.setOnClickListener(new OnClickListener()
{
public void onClick(View view){
int duration;
String error;
long categoryID;
;
int errCount = 0;
if (!categoryName.getText().toString().equals("")){
for (int i = 0;i<m_edit.size();i++){
if (m_edit.get(i).getText().toString().equals("")){
errCount++;
}
}
if (errCount != 0){
GroupItem group = new GroupItem(categoryName.getText().toString());
categoryID = dbAdapter.insertGroup(group);
for (int i = 0;i<m_edit.size();i++){
FieldItem field = new FieldItem(m_edit.get(i).getText().toString());
duration = Toast.LENGTH_SHORT;
error = m_edit.get(i).getText().toString();
Toast.makeText(context, error, duration).show();
}
}
else{
duration = Toast.LENGTH_SHORT;
error = "Field cannot be empty";
Toast.makeText(context, error, duration).show();
}
}
else{
duration = Toast.LENGTH_SHORT;
error = "Name cannot be empty";
Toast.makeText(context, error, duration).show();
}
}
});
}
private class EditAdapter extends ArrayAdapter<EditText>{
private ArrayList <EditText> items;
public EditAdapter(Context context, int textViewResourceId, ArrayList<EditText> items) {
super(context, textViewResourceId, items);
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.categoryfieldlayout, null);
}
EditText et = (EditText)v.findViewById(R.id.fieldEdit);
return v;
}
}
}
当我更新(写一些文本)我的自定义 listView 项目的 EditText 字段时,我认为 m_edit 不会自动更新其内容。所以问题是,如何强制更新
ps。对不起我的英语不好
【问题讨论】:
-
一旦您单击 fieldAddButton,您将获得 editText 值。顺便说一句,您在哪里调用 for 循环。