"অ্যারেএডাপ্টারের জন্য রিসোর্স আইডিটি একটি টেক্সটভিউ হওয়া দরকার" এক্সএমএল সমস্যা


181

আমি ListViewযে ফাইলটি প্রদর্শন করতে চাইছি তার পাঠ্য প্রদর্শন করতে আমার দৃষ্টিভঙ্গি সেট করার চেষ্টা করার সময় আমি একটি ত্রুটি পেয়ে যাচ্ছি (পাঠ্য ফাইল)। আমি বেশ নিশ্চিত যে এর এক্সএমএল এর সাথে কিছু করার আছে। আমি শুধু থেকে তথ্য প্রদর্শন করতে চান 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 বিন্যাস মাত্র ধারণকারী ফাইলের আইডি হওয়া উচিত নয় TextView( TextView না পারেন, একটি মত আরেকটি বিন্যাস দ্বারা আবৃত করা LinearLayout, RelativeLayout! ইত্যাদি), ভালো কিছু:

<?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বিভিন্ন বিন্যাস ধারণ করতে পারে এমন একটি বিন্যাস সরবরাহ করেন তবে এতে অবশ্যই আপনার সাথে পাস করা একটি TextViewএবং idতৃতীয় প্যারামিটার থাকতে হবেArrayAdapter যাতে এটি Stringsসারি বিন্যাসে কোথায় রাখা উচিত তা জানতে পারে ।


2
এই একই সমস্যা ছিল কারণ আমার টেক্সটভিউটি এক্সএমএল ফাইলটিতে লিনিয়ারলআউটের ভিতরে ছিল।
ভ্যালেন্টিন দেশপা

আমার কাছে থাকা একটি স্বতঃসিদ্ধ ড্রপডাউনটিতে এটি চেষ্টা করা হয়েছে তবে এটি স্ক্রোলিং করতে দেয়নি বা আমাকে তালিকা থেকে কোনও আইটেম নির্বাচন করতে
দেয়নি

29
TextView করতে (আমি এটা করেনি) অন্য লেআউট আবৃত করা। অন্যান্য কনস্ট্রাক্টরটি এটি করতে new ArrayAdapter<String>(this, R.layout.a_layout_file, R.id.a_text_view_within_layout, this.file)জাভাদোক দেখুনandroid.widget.ArrayAdapter
পেট্রা গ্ল্যাডকিখ

6
আপনি আমার উত্তরটি খুব ভালভাবে পড়েন নি: আপনি যখন এই নির্মাণকারীটি ব্যবহার করেন : ... (টেক্সটভিউটি অন্য লেআউট দ্বারা মোড়ানো যায় না , যেমন লিনিয়ারলআউট, রিলেটিভলআউট ইত্যাদি!) । এটি আপনি দ্বিতীয় নির্মাতা সংস্করণ যা চান তা দিয়ে মুছতে পারে যা একটি আইডিও লাগে (যেমন আমি আমার উত্তরের দ্বিতীয় অংশে উল্লেখ করেছি)।
Luksprog

6
তোমাকে অনেক ধন্যবাদ! আমি একটি দেয়ালের বিরুদ্ধে মাথা ঠেকিয়ে তিন ঘন্টা কাটিয়েছি। অন্যান্য রেফারেন্সগুলি বলেছিল যে আপনার কেবলমাত্র একটি পাঠ্যদর্শন থাকতে পারে, তবে "টেক্সটভিউটি লিনিয়ারলআউটের মতো অন্য লেআউটে মোড়ানো যায় না of হুই, স্নিপ স্নিপ এবং এটি কবজির মতো কাজ করে। আবারও, ধন্যবাদ!
স্কট বিগস

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
আমি জানি এটি মনে হয় এটি কোনও মস্তিষ্কের হওয়া উচিত, তবে অ্যারেএডাপ্টার কনস্ট্রাক্টরগুলির জন্য ডকুমেন্টেশনগুলি সন্ধান করায় এটি আমারও সহায়তা করেছিল। লিংক
ভাগিংগিং 3 আর

1

আপনি যদি অ্যারেএডাপ্টার প্রসারিত করার সময় আপনি যদি সেই বার্তাটি পেয়ে থাকেন তবে আপনি সেই ত্রুটিটি পাচ্ছেন কারণ আপনি আইটেমটি প্রদর্শনের জন্য সঠিক সংস্থান আইডি সরবরাহ করেন নি। কনস্ট্রাক্টারে সুপার ক্লাসকে কল করুন এবং টেক্সটভিউয়ের সংস্থান আইডিতে পাস করুন:

    //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;
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.