【发布时间】:2013-01-04 18:19:19
【问题描述】:
我是使用 Android 编程的新手,我试图通过允许用户通过 EditText 输入文本来制作 ListView。我终于让它工作了,但是我不太清楚为什么我的第一种方法不起作用:
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,values);
lv.setAdapter(adapter);
这导致应用程序启动时强制关闭,我发现这是由于 lv.setAdapter(adapter)
在经历了许多 stackoverflow 问题后,我看到一个回答说没有必要使用 ArrayList 和 ArrayAdapter。所以我尝试了以下方法并且成功了:
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
lv.setAdapter(adapter);
这一次,当我没有创建数组列表时,它工作得很好。
所以,我的问题是为什么当我没有在我的 ArrayAdapter 中定义/创建一个字符串数组时它会起作用,以及为什么我的第一个方法不起作用。
提前感谢您的帮助,如果我没有发布足够的代码,我很抱歉。
编辑:下面是我的第一个方法 我试图重新创建我的第一个方法,它如下: 它仍然像第一次一样强制关闭。请注意,在我的第二种方法(有效)中,我所做的只是不使用 ArrayList 并在 arrayAdapter 构造中采用第三个参数。同样,既然您的回答告诉我,我的值可能为“null”,我认为您是正确的。我怎样才能纠正这个以备将来使用?谢谢!
public class TaskPage extends SherlockActivity {
EditText display;
ListView lv;
ArrayAdapter<String> adapter;
Button addButton;
ArrayList<String> values;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = (EditText) findViewById(R.id.editText1);
lv = (ListView) findViewById(R.id.listView1);
addButton = (Button) findViewById(R.id.button1);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
lv.setAdapter(adapter);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String task = display.getText().toString();
values.add(task);
adapter.notifyDataSetChanged();
}
});
【问题讨论】:
-
你有强制关闭发生时的堆栈跟踪吗?
-
values 是我的 ArrayList 的名称。我有一个按钮接收 EditText 文本,然后转换为字符串。然后我把它放入称为值的数组列表中
-
赋值是否占据整个ArrayList?如果您的 ArrayList 大于您使用它的大小,则数组中存在未使用的空值位置,这可能会导致强制关闭。山姆的回答表明了同样的看法。
-
啊,我想我明白你的意思了。谢谢!
-
"但是谁能告诉我为什么我不需要在我的 ArrayAdapter 构造函数中有一个字符串数组参数"This construtor 假设您稍后将调用
add()、insert()等填充您的 ListView。