"ArrayAdapter संसाधन ID को TextView होने की आवश्यकता है" xml समस्याएं


181

जब ListViewमैं जिस फ़ाइल को प्रदर्शित करना चाहता हूं, उसे प्रदर्शित करने के लिए अपना दृश्य सेट करने का प्रयास करते समय मुझे एक त्रुटि मिल रही है (पाठ फ़ाइल)। मुझे पूरा यकीन है कि इसका 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);
    }

}

list_item.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>

main.xml :

<?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>

जवाबों:


427

ArrayAdapter एक TextView एक्सएमएल होने के लिए संसाधन आईडी की आवश्यकता है अपवाद साधन तुम क्या नहीं दे रहे हों ArrayAdapterकी उम्मीद है। जब आप इस कंस्ट्रक्टर का उपयोग करते हैं:

new ArrayAdapter<String>(this, R.layout.a_layout_file, this.file)

R.Layout.a_layout_fileएक xml लेआउट फ़ाइल की आईडी होनी चाहिए जिसमें केवल a TextView( किसी अन्य लेआउट, जैसे , आदि) से लपेटा TextView नहीं जा सकता है , कुछ इस तरह है:LinearLayoutRelativeLayout

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    // other attributes of the TextView
/>

यदि आप चाहते हैं कि आपकी सूची पंक्ति लेआउट कुछ अलग हो तो एक साधारण TextViewविजेट इस निर्माता का उपयोग करें:

new ArrayAdapter<String>(this, R.layout.a_layout_file, 
   R.id.the_id_of_a_textview_from_the_layout, this.file)

जहाँ आप idएक ऐसे लेआउट की आपूर्ति करते हैं जिसमें विभिन्न दृश्य हो सकते हैं, लेकिन इसके साथ एक और (तीसरा पैरामीटर) भी होना चाहिए जो आप अपने पास से गुजरते हैं ताकि यह पता चल सके कि पंक्ति लेआउट में कहाँ रखा जाए ।TextViewidArrayAdapterStrings


2
एक ही समस्या थी क्योंकि मेरा TextView xml फ़ाइल में एक LinearLayout के अंदर था।
वैलेंटाइन देस्पा

यह एक स्वत: पूर्ण ड्रॉपडाउन पर है, लेकिन मैंने इसे स्क्रॉल करने की अनुमति नहीं दी है और न ही मुझे सूची से किसी भी आइटम का चयन करने की अनुमति दी है
kabuto178

29
TextView को अन्य लेआउट में लपेटा जा सकता है (मैंने अभी किया था)। ऐसा करने के लिए अन्य कंस्ट्रक्टर new ArrayAdapter<String>(this, R.layout.a_layout_file, R.id.a_text_view_within_layout, this.file)देखें जेवाडॉक का उपयोग करेंandroid.widget.ArrayAdapter
पेट्र ग्लैडिख

6
आपने मेरे उत्तर को बहुत अच्छी तरह से नहीं पढ़ा: जब आप इस कंस्ट्रक्टर का उपयोग करते हैं : ... (TextView को अन्य लेआउट द्वारा नहीं जोड़ा जा सकता है, जैसे कि LinearLayout, RelativeLayout आदि!) । इसे दूसरे कंस्ट्रक्टर वर्जन के साथ जो भी आप चाहते हैं, उसके साथ लिपटे जा सकते हैं जो एक आईडी भी लेता है (जैसे कि मैंने अपने उत्तर के दूसरे भाग में उल्लेख किया है)।
लुक्सप्रोग

6
आपको बहुत - बहुत धन्यवाद! मैंने तीन घंटे तक अपना सिर दीवार पर टिकाया। अन्य संदर्भों में कहा गया है कि आपके पास केवल एक TextView हो सकता है, लेकिन मुझे "LinViewLoutout की तरह टेक्स्टव्यू को किसी अन्य लेआउट द्वारा लपेटा नहीं जा सकता है" की सभी महत्वपूर्ण आवश्यकता नहीं मिल सकती है। व्हीव, स्निप स्निप और यह एक आकर्षण की तरह काम करता है। फिर से धन्यवाद!
स्कॉट बिग्स

31

सौतन यहां है

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>

जावा कोड:

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

1
मुझे पता है कि ऐसा लगता है कि यह एक दिमाग नहीं होना चाहिए, लेकिन ArrayAdapter कंस्ट्रक्टरों के लिए दस्तावेज को देखने से मुझे भी मदद मिली। लिंक
luckyging3r

1

यदि आपको वह संदेश मिल रहा है जब आप एक ArrayAdapter का विस्तार कर रहे हैं, तो आपको वह त्रुटि मिल रही है क्योंकि आपने आइटम को प्रदर्शित करने के लिए सही संसाधन आईडी प्रदान नहीं किया है। कंस्ट्रक्टर में सुपर क्लास को कॉल करें और टेक्स्ट व्यू की संसाधन आईडी में पास करें:

    //Pass in the resource id:  R.id.text_view
    SpinnerAdapter spinnerAddToListAdapter = new SpinnerAdapter(MyActivity.this,
            R.id.text_view,
            new 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;
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.