Android SDK-Java-listview.setAdapter失败

Android SDK-Java-listview.setAdapter失败,java,android,listview,sdk,Java,Android,Listview,Sdk,我有下面的源代码运行完美。 它没什么作用,但我可以指点、点击和摆弄它 一旦我取消注释: listview.setAdapter(adapter); 所有该死的刹车都松了,我真的不知道为什么 05-22 18:12:52.962: E/AndroidRuntime(27603): FATAL EXCEPTION: main 05-22 18:12:52.962: E/AndroidRuntime(27603): android.content.res.Resources$NotFoundExce

我有下面的源代码运行完美。 它没什么作用,但我可以指点、点击和摆弄它

一旦我取消注释:

listview.setAdapter(adapter);
所有该死的刹车都松了,我真的不知道为什么

05-22 18:12:52.962: E/AndroidRuntime(27603): FATAL EXCEPTION: main
05-22 18:12:52.962: E/AndroidRuntime(27603): android.content.res.Resources$NotFoundException: Resource ID #0x7f080001 type #0x12 is not valid
我根本不知道这种高级语言在我脸上吐什么。。 爪哇,我恨你。。但是我们彼此都被困在一起,所以如果有人能帮助我,那就太好了

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ListView listview = (ListView) findViewById(R.id.theList);
        String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
            "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
            "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux",
            "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2",
            "Android", "iPhone", "WindowsMobile" };

        final ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < values.length; ++i) {
            list.add(values[i]);
        }

        final StableArrayAdapter adapter = new StableArrayAdapter(this, R.id.theList, list);
        //listview.setAdapter(adapter);

        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
                final String item = (String) parent.getItemAtPosition(position);
                Log.d("Test", item);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void listFiles() {
        File file = new File(Environment.getExternalStorageDirectory(), "");
        File files[] = file.listFiles();
        for (int i=0; i < files.length; i++)
        {
            String filename = files[i].getName();
            Integer pos = filename.indexOf(".pdf");
            if (pos >= 0) {
                Log.d("Files", "FileName:" + filename);
                //listItems.add(filename);
                //adapter.notifyDataSetChanged();
            }
        }
    }

    private class StableArrayAdapter extends ArrayAdapter<String> {

        HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();

        public StableArrayAdapter(Context context, int textViewResourceId,
            List<String> objects) {
          super(context, textViewResourceId, objects);
          for (int i = 0; i < objects.size(); ++i) {
            mIdMap.put(objects.get(i), i);
          }
        }

        @Override
        public long getItemId(int position) {
          String item = getItem(position);
          return mIdMap.get(item);
        }

        @Override
        public boolean hasStableIds() {
          return true;
        }

    }
}
导入java.io.File;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入android.os.Bundle;
导入android.os.Environment;
导入android.util.Log;
导入android.view.view;
导入android.app.Activity;
导入android.content.Context;
导入android.view.Menu;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
公共类MainActivity扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
最终ListView ListView=(ListView)findViewById(R.id.theList);
字符串[]值=新字符串[]{“Android”、“iPhone”、“WindowsMobile”,
“黑莓”、“WebOS”、“Ubuntu”、“Windows7”、“Max OS X”,
“Linux”、“OS/2”、“Ubuntu”、“Windows7”、“Max OS X”、“Linux”,
“OS/2”、“Ubuntu”、“Windows7”、“Max OS X”、“Linux”、“OS/2”,
“安卓”、“iPhone”、“WindowsMobile”};
最终ArrayList=新ArrayList();
对于(int i=0;i=0){
Log.d(“文件”,“文件名:”+FileName);
//添加(文件名);
//adapter.notifyDataSetChanged();
}
}
}
私有类StableArayAdapter扩展了ArrayAdapter{
HashMap mIdMap=新的HashMap();
公共StableArrayAdapter(上下文上下文,int textViewResourceId,
列出对象){
超级(上下文、textViewResourceId、对象);
对于(int i=0;i
我想做的只是将项目添加到名为
@+id/theList
的列表对象中。
这似乎比我做过的任何事都难。。由于某些原因,列表在我的应用程序中不可见,即使它似乎是由项组成的(在adding循环中运行了.log函数,后面的行是.add,它不会给出异常)

您不应该使用此构造函数吗

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

如果您所做的只是在一行中显示文本,并且您可以使用
SimpleAdapter

来使用ArrayAdapter的默认实现,那么在构造函数(textViewResourceId)中传递的视图应该是一个包含名为“text1”的文本视图元素的布局元素


正如@tyczj所建议的,如果你想要一个简单的基本列表,你可以使用“android.R.layout.simple\u list\u item\u 1”。如果查看源代码,它是一个布局元素,只有一个子元素。名为“text1”的文本视图。

好的,让我们看看您在这里做什么:

final StableArrayAdapter=新的StableArrayAdapter(此,R.id.t列表,列表);
//setAdapter(适配器)

您不重写任何阵列适配器构造函数,因此调用此阵列适配器构造函数:

publicArrayAdapter(上下文上下文,int-textViewResourceId,T[]对象)

那么,你要传递的论点是什么

  • 上下文是你的活动(这个),这很好
  • textViewResourceId是您的列表id
  • 对象是您的列表
问题是第二个参数
textViewResourceId
。在这种情况下,这有点误导,因为它并没有要求您实际列表的资源id。它正在寻找行项目布局的资源id

android.R.layout.simple_list_item_1
是列表视图中项目的默认布局

例如,如果您希望有一个图标或更多文本或其他内容,您可以定义自己的布局


但这就是
setAdapter
引发异常的原因

试用:StableArrayAdapter=新的StableArrayAdapter(这个,android.R.layout.simple\u list\u item\u 1,list);看起来不错,而且不仅仅是android.R.layout.simple\u list\u item\u 1 R.layout.simple\u list\u item\u 1。这是android listView的基本项的id。快乐:)@Torexd,当你意识到发生了什么时,这是非常有意义的。在适配器中,您告诉它要在阵列中使用哪些数据。
new StableArrayAdapter(this,android.R.layout.simple_list_item_1,android.r.id.text1,list);