Android &引用;ArrayAdapter要求资源ID为TextView“;XML问题
尝试将视图设置为显示要显示的文件(文本文件)的Android &引用;ArrayAdapter要求资源ID为TextView“;XML问题,android,xml,android-arrayadapter,Android,Xml,Android Arrayadapter,尝试将视图设置为显示要显示的文件(文本文件)的列表视图时出错。我很确定这与XML有关。我只想显示来自this.file=fileop.ReadFileAsList(“Installed_packages.txt”)的信息。我的代码: public class Main extends Activity { private TextView tv; private FileOperations fileop; private String[] file; /**
列表视图时出错。我很确定这与XML有关。我只想显示来自this.file=fileop.ReadFileAsList(“Installed_packages.txt”)的信息代码>。我的代码:
public class Main extends Activity {
private TextView tv;
private FileOperations fileop;
private String[] file;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.fileop = new FileOperations();
this.file = fileop.ReadFileAsList("Installed_packages.txt");
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.TextView01);
ListView lv = new ListView(this);
lv.setTextFilterEnabled(true);
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, this.file));
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
}
});
setContentView(lv);
}
}
public类主扩展活动{
私家图文电视;
私人文件操作文件;
私有字符串[]文件;
/**首次创建活动时调用。*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.fileop=新文件操作();
this.file=fileop.ReadFileAsList(“Installed_packages.txt”);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.TextView01);
ListView lv=新的ListView(本);
lv.setTextFilterEnabled(真);
lv.setAdapter(新的ArrayAdapter(this,R.layout.list_项,this.file));
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、int位置、长id){
//单击后,显示带有文本视图文本的祝酒词
Toast.makeText(getApplicationContext(),((TextView)视图).getText(),Toast.LENGTH_SHORT.show();
}
});
setContentView(lv);
}
}
列表项.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp"
android:textSize="16sp"
android:textColor="#000">
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<ScrollView
android:id="@+id/SCROLLER_ID"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:fillViewport="true">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5sp"
android:id="@+id/TextView01"
android:text="@string/hello"/>
</ScrollView>
</LinearLayout>
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp"
android:textSize="16sp"
android:textColor="#000">
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<ScrollView
android:id="@+id/SCROLLER_ID"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:fillViewport="true">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5sp"
android:id="@+id/TextView01"
android:text="@string/hello"/>
</ScrollView>
</LinearLayout>
ArrayAdapter要求资源ID为TextView XML异常,这意味着您无法提供ArrayAdapter
所需的内容。使用此构造函数时:
new ArrayAdapter<String>(this, R.layout.a_layout_file, this.file)
new ArrayAdapter<String>(this, R.layout.a_layout_file,
R.id.the_id_of_a_textview_from_the_layout, this.file)
如果您希望列表行布局有点不同,那么一个简单的TextView
小部件可以使用以下构造函数:
new ArrayAdapter<String>(this, R.layout.a_layout_file, this.file)
new ArrayAdapter<String>(this, R.layout.a_layout_file,
R.id.the_id_of_a_textview_from_the_layout, this.file)
new ArrayAdapter(此,R.layout.a_layout_文件,
R.id.a\u文本视图的\u id\u来自\u布局,this.file)
如果您提供可以包含各种视图的布局的id
,但必须包含TextView
和id
(第三个参数)传递给数组适配器,以便它知道在行布局中放置字符串的位置
listitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</TextView>
</LinearLayout>
Java代码:
String[] countryArray = {"India", "Pakistan", "USA", "UK"};
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.listitem,R.id.textview, countryArray);
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);
String[]countryArray={“印度”、“巴基斯坦”、“美国”、“英国”};
ArrayAdapter=新的ArrayAdapter(this,R.layout.listitem,R.id.textview,countryArray);
ListView ListView=(ListView)findViewById(R.id.ListView);
setAdapter(适配器);
如果在扩展ArrayAdapter时收到该消息,则会出现该错误,因为您没有提供正确的资源id来显示该项。调用构造函数中的超类并传入TextView的资源id:
//Pass in the resource id: R.id.text_view
SpinnerAdapter spinnerAddToListAdapter = new SpinnerAdapter(MyActivity.this,
R.id.text_view,
new ArrayList<>());
//传入资源id:R.id.text\u视图
SpinnerAdapter spinnerAddToListAdapter=新SpinnerAdapter(MyActivity.this,
R.id.text_视图,
新的ArrayList());
适配器:
public class SpinnerAdapter extends ArrayAdapter<MyEntity> {
private Context context;
private List<MyEntity> values;
public SpinnerAdapter(Context context, int textViewResourceId,
List<MyEntity> values) {
//Pass in the resource id: R.id.text_view
super(context, textViewResourceId, values);
this.context = context;
this.values = values;
}
公共类SpinnerAdapter扩展了ArrayAdapter{
私人语境;
私有列表值;
公共SpinnerAdapter(上下文,int textViewResourceId,
列表值){
//传入资源id:R.id.text\u视图
super(上下文、textViewResourceId、值);
this.context=上下文;
这个值=值;
}
也有同样的问题,因为我的TextView位于xml文件中的LinearLayout中。我在一个自动完成下拉列表中尝试了此操作,但它不允许滚动,也不允许我从列表中选择任何项目TextView可以包装在其他布局中(我刚刚完成)。为此,请使用其他构造函数新建ArrayAdapter(this,R.layout.a_layout_文件,R.id.a_text_view_in_layout,this.file)
请参阅javadoc forandroid.widget.ArrayAdapter
您没有很好地阅读我的答案:当您使用此构造函数时:…(文本视图不能被其他布局包装,如LinearLayout、RelativeLayout等!)。第二个构造函数版本也需要id(如我在回答的第二部分中提到的),它可以被任何你想要的东西包装起来。非常感谢!我花了三个小时的时间把头撞在墙上。其他参考资料说你只能有一个TextView,但我找不到最重要的要求“文本视图不能被另一个布局包装,比如线性布局。”哇,剪短剪短,它就像一个符咒。再次感谢!我知道这似乎是一个不需要动脑筋的问题,但查看ArrayAdapter构造函数的文档也帮了我的忙。