gpt4 book ai didi

java - Android SDK - Java - listview.setAdapter 失败

转载 作者:行者123 更新时间:2023-12-02 07:00:42 25 4
gpt4 key购买 nike

我有以下源代码完美运行。它的作用不大,但运行时我可以指向、单击和摆弄。

一旦我取消评论:

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

我根本不知道这种高级语言在我脸上吐了什么。Java,我恨你……但我们彼此纠缠不清,所以如果有人能帮助我,那就太好了。

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;
}

}
}

我想做的只是将项目添加到名为 @+id/theList 的列表对象中。它看起来比我做过的任何事情都难。由于某种原因,该列表在我的应用程序中不可见,即使它似乎填充有项目(在添加循环中运行 .log 函数,后面的行是 .添加不会给出异常(exception))

最佳答案

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

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

您不会重写任何数组适配器构造函数,因此您将调用此数组适配器构造函数:

public ArrayAdapter(上下文上下文,int textViewResourceId,T[]对象) here

那么,您传入的参数是什么?

  • 上下文是您的 Activity (此),这很好
  • textViewResourceId 是您的列表 ID。
  • objects 是您的列表

问题出在第二个参数textViewResourceId。在这种情况下,这有点误导,因为它不要求实际列表的资源 ID。它正在寻找行项目的布局方式的资源 ID。

android.R.layout.simple_list_item_1 是 ListView 中项目的默认布局。

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

但这就是setAdapter 抛出异常的原因。

关于java - Android SDK - Java - listview.setAdapter 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16696726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com