AdaptorView と addView に関する問題
-
14-11-2019 - |
質問
以下のクラスでいくつかのテキストビュー/ボタン/スピナーと、解析されたデータを含むリストビューを表示したいと考えています。ただし、listview/adapter/addview はいくつかの問題を引き起こしています。私が得ているエラーは次のとおりです。
java.lang.UnsupportedOperationException:addView(View, LayoutParams) は、AdapterView ではサポートされていません
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>
xmlレイアウト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 は単純な textView です。
編集:
さて、いくつかのファイルを更新しましたが、実行時例外エラーが発生しました。
コンテンツには、属性が「android.R.id.list」である ListView が必要です。
更新されたファイルは次のとおりです。
クラス:
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);
}
}
私の統計スクリーンレイアウトには、テキストビューなどのリニアレイアウトがすべて含まれています。そして私はそこからこれを削除しました:
<include layout="@layout/xmllayout" android:id="@+id/xmllist" />
次に、他の 2 つのレイアウトは、単純な textview(xmldatarow) と listview(xmllayout) です。したがって、明確にするために、私の統計画面レイアウトにはリストビューも「インクルード」もありません。
何かアドバイス?ありがとう
解決
このようにビューをリストビューに直接インフレートすることはできません。たぶん探していると思います ListView
さんの addHeaderView
または addFooterView
方法。電話をかける前に必ず電話してください setListAdapter
.
編集:それを完全に詳しく説明すると、次のようになります。あなたが望んでいたと仮定すると statsviewlayout
リストの一番上に:を置かないでください LinearLayout
直接 ListView
要素 (ListViews
子供を持つべきではない)。に入れてください 別 XML ファイル (たとえば、 statsview.xml
) そして、onCreate で次のようなことを行います。
getListView().addHeaderView(View.inflate(this, R.layout.statsview.xml, null));
こちらの古いものもご覧ください アンドロイド初心者の投稿.