Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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 &引用;ArrayAdapter要求资源ID为TextView“;XML问题_Android_Xml_Android Arrayadapter - Fatal编程技术网

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 for
android.widget.ArrayAdapter
您没有很好地阅读我的答案:当您使用此构造函数时:…(文本视图不能被其他布局包装,如LinearLayout、RelativeLayout等!)。第二个构造函数版本也需要id(如我在回答的第二部分中提到的),它可以被任何你想要的东西包装起来。非常感谢!我花了三个小时的时间把头撞在墙上。其他参考资料说你只能有一个TextView,但我找不到最重要的要求“文本视图不能被另一个布局包装,比如线性布局。”哇,剪短剪短,它就像一个符咒。再次感谢!我知道这似乎是一个不需要动脑筋的问题,但查看ArrayAdapter构造函数的文档也帮了我的忙。