مشكلة مع AdapterView وaddView
-
14-11-2019 - |
سؤال
أريد أن يعرض الفصل أدناه بعض طرق عرض النص/الأزرار/المغازل، وكذلك ListView الذي يحتوي على بيانات تم تحليلها.لكن عرض القائمة/المحول/الإضافة يسبب بعض المشاكل.هذا هو الخطأ الذي أتلقىه:
java.lang.UnsupportedOperationException:addView(View, LayoutParams) غير مدعوم في AdaptorView
لدي شعور بأن الأمر يتعلق بملفات xml الخاصة بي، لكنني لست متأكدًا تمامًا.هذا هو الكود الخاص بي:
public class StatisticsScreen extends ListActivity{
private List<Message> messages;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.statisticsscreen);
loadFeed();
//other textviews and listeners added
}
private void loadFeed() {
try{
BaseFeedParser parser = new BaseFeedParser();
messages = parser.parse();
List<String> titles = new ArrayList<String>(messages.size());
for (Message msg : messages){
titles.add(msg.getTitle());
}
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this, R.layout.xmldatarow,titles);
this.setListAdapter(adapter);
} catch (Throwable t){
Log.e("AndroidNews",t.getMessage(),t);
}
}
شاشة الإحصائيات الخاصة بي XML:
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:id="@+id/statsviewlayout"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/black">
//other layouts/textviews/buttons added
<include layout="@layout/xmllayout" android:id="@+id/xmllist" />
</LinearLayout>
</ListView>
xmllayout XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ListView android:id="@+id/xmllist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
xmldatarow عبارة عن عرض نصي بسيط.
يحرر:
حسنًا، لقد قمت بتحديث بعض الملفات وظهر لي خطأ استثناء في وقت التشغيل:
يجب أن يحتوي المحتوى الخاص بك على ListView وخاصيته هي "android.R.id.list".
وهنا الملفات المحدثة:
فصل:
setContentView(R.layout.statisticsscreen);
loadFeed();
getListView().addHeaderView(View.inflate(this, R.layout.xmllayout, null));
private void loadFeed() {
try{
BaseFeedParser parser = new BaseFeedParser();
messages = parser.parse();
List<String> titles = new ArrayList<String>(messages.size());
for (Message msg : messages){
titles.add(msg.getDate());
}
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this, R.layout.xmldatarow,titles);
this.setListAdapter(adapter);
} catch (Throwable t){
Log.e("AndroidNews",t.getMessage(),t);
}
}
يحتوي نمط statsscreenlayout الخاص بي على جميع التخطيطات الخطية مع طرق عرض النص وما إلى ذلك.وحذفت منه هذا:
<include layout="@layout/xmllayout" android:id="@+id/xmllist" />
ثم التخطيطان الآخران الخاصان بي هما عرض نصي بسيط (xmldatarow) وعرض قائمة (xmllayout).لذا فقط للتوضيح، لا يوجد أي عرض قائمة أو أي "تضمين" في تخطيط شاشة الإحصائيات الخاصة بي.
اي نصيحه؟شكرًا
المحلول
لا يمكنك تضخيم طرق العرض مباشرة في عرض قائمة كهذا.أعتقد أنك قد تكون تبحث عنه ListView
'س addHeaderView
أو addFooterView
طُرق.تأكد من الاتصال بهم قبل الاتصال setListAdapter
.
يحرر:لتوضيحها بالكامل:على افتراض أنك تريد statsviewlayout
في أعلى قائمتك:لا تضع LinearLayout
مباشرة في ListView
عنصر (ListViews
لا ينبغي أن يكون لها أطفال).ضعه في أ متفرق ملف xml (على سبيل المثال، statsview.xml
) وافعل شيئًا مثل هذا في onCreate الخاص بك:
getListView().addHeaderView(View.inflate(this, R.layout.statsview.xml, null));
انظر أيضا هذا القديم الروبوت-مبتدئين آخر.