我是使用 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();
}
});