Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:使用ListView ArrayAdapter/ArrayList_Android_Arrays - Fatal编程技术网

Android:使用ListView ArrayAdapter/ArrayList

Android:使用ListView ArrayAdapter/ArrayList,android,arrays,Android,Arrays,我是Android编程新手,我试图通过允许用户通过EditText输入文本来创建ListView。我终于让它工作了,但我不太清楚为什么我的第一种方法不起作用: adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,values); lv.setAdapter(adapter); 这导致应用程序启动时强制关闭,我发现这是由于lv.setAdapteradapter造成的 在浏览了许多s

我是Android编程新手,我试图通过允许用户通过EditText输入文本来创建ListView。我终于让它工作了,但我不太清楚为什么我的第一种方法不起作用:

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,values);
lv.setAdapter(adapter);
这导致应用程序启动时强制关闭,我发现这是由于lv.setAdapteradapter造成的

在浏览了许多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();

        }
    });

如果第二种方法有效,但第一种方法无效,则值至少有一个元素为null。当适配器尝试将此空值与TextView绑定时,这将引发异常。 只需从值中删除任何空数据

从ArrayAdapter的:


我越想它值本身也可能为空。。。这就是LogCat错误和调试器非常方便的地方。

如果第二种方法有效,但第一种方法无效,则值至少有一个元素为null。当适配器尝试将此空值与TextView绑定时,这将引发异常。 只需从值中删除任何空数据

从ArrayAdapter的:

我越想它值本身也可能为空。。。这就是LogCat错误和调试器非常方便的地方。

在确保值和lv不为null,并且不包含任何null元素后,这应该在YourActivity中工作,或者它的子类属于它。:

adapter = new ArrayAdapter<String>(YourActivity.this, android.R.layout.simple_list_item_1, values);
lv.setAdapter(adapter);
在确保values和lv不为null,并且不包含任何null元素后,这应该在YourActivity或属于它的子类中工作:

adapter = new ArrayAdapter<String>(YourActivity.this, android.R.layout.simple_list_item_1, values);
lv.setAdapter(adapter);

这篇文章很老了,但我偶然发现了它,并想补充一下对我的修复方法。根据文档,默认情况下,此类希望提供的资源id引用单个TextView。我使用的是一个带有文本视图的RelativeLayout。这是很明显的,但为了防止它对其他人有帮助…

这篇文章很老了,但我遇到了它,想补充一下对我的修复。根据文档,默认情况下,此类希望提供的资源id引用单个TextView。我使用的是一个带有文本视图的RelativeLayout。这是很明显的,但为了防止它对其他人有帮助…

是否有强制关闭时的堆栈跟踪?值是我的ArrayList的名称。我有一个按钮接收EditText文本,然后转换成字符串。然后我把它放到arraylist中,称为Values,赋值是否占据了整个arraylist?如果您的ArrayList大于您使用它的值,那么数组中有空值的未使用位置,这可能会导致强制关闭。山姆的回答也是如此。啊,我想我明白你的意思了。谢谢但是soemone能告诉我为什么我的ArrayAdapter构造函数中不需要字符串数组参数吗?假设您稍后将调用add、insert等来填充ListView。您有强制关闭时的堆栈跟踪吗?值是我的ArrayList的名称。我有一个按钮接收EditText文本,然后转换成字符串。然后我把它放到arraylist中,称为Values,赋值是否占据了整个arraylist?如果您的ArrayList大于您使用它的值,那么数组中有空值的未使用位置,这可能会导致强制关闭。山姆的回答也是如此。啊,我想我明白你的意思了。谢谢但是soemone能告诉我为什么我的ArrayAdapter构造函数中不需要一个字符串数组参数吗?假设您稍后将调用add、insert等来填充ListView。我也确定值为null。我没有尝试让值为null,但我可能已经这样做了。我没有我的第一个方法的完整代码,所以我无法完全解释。我没有尝试将值设为null,没有人故意破坏他们的应用程序,但我们都这么做了:我没有我的第一个方法的完整代码,所以我不能完全解释。我的回答有助于你理解正在发生的事情吗?如果是这样,请接受它,因为我不知道如何有人可以回答你原来的问题beyon
d我已经写了没有更多细节的东西…我也确定值为空。我没有尝试让值为空,但是我可能已经这么做了。我没有我的第一个方法的完整代码,所以我无法完全解释。我没有尝试将值设为null,没有人故意破坏他们的应用程序,但我们都这么做了:我没有我的第一个方法的完整代码,所以我不能完全解释。我的回答有助于你理解正在发生的事情吗?如果是这样的话,请接受它,因为我不确定除了我已经写过的没有更多细节的问题之外,其他人如何回答你的原始问题…如果第二种方法能够解决这个问题,那么更改上下文引用如何解决错误?我确实尝试过这种方法更改上下文引用..但它仍然导致了强制关闭。因此,我认为@Sam是正确的,因为我将数组列表值设置为null。@Sam:我刚想到可能存在与上下文相关的问题;如果我们排除ListView和ArrayList对象不为null。引用上下文不会引起问题,它只会解决错误。但是,如果我们确保值和lv正常,那么我的拙见是,这段代码应该可以工作。@user1949400这只是一个很长的目标,但我只是想指出它。好的,我会在重试时发布代码。因为我不想在以后添加更多功能时再因此而遇到更多问题。如果第二种方法能够解决此问题,那么更改上下文引用如何解决此错误?我确实尝试过此方法更改上下文引用..但仍然导致强制关闭。因此,我认为@Sam是正确的,因为我将数组列表值设置为null。@Sam:我刚想到可能存在与上下文相关的问题;如果我们排除ListView和ArrayList对象不为null。引用上下文不会引起问题,它只会解决错误。但是,如果我们确保值和lv正常,那么我的拙见是,这段代码应该可以工作。@user1949400这只是一个很长的目标,但我只是想指出它。好的,我会在重试时发布代码。因为我不想在以后添加更多的功能时再遇到更多的问题。