0

私はListView自分のアプリにを実装しようとしていますが、XMLファイルを使用せずにすべてJavaコードを使用してそれを実現する方法を理解し、学習しようとしています。

インフレータの部分で立ち往生していて、mInflater.inflate();関数にはリソースxmlファイルが必要なので、XMLファイルを使用せずに続行する方法がわかりませんでした

私はArrayList文字列のを持っています、そして私は単にListViewこれらの文字列のリストを示すリストと、の右側のArraylist削除が必要です。ユーザーがを押すと、 getのアイテムが削除されます。ButtonStringButtonList

の各アイテムには、のとそれを削除するためのListView2つのものがあります。TextViewStringArrayListButton

誰かが私にコード例を教えてくれれば、私は感謝するでしょう。

ありがとう

4

1 に答える 1

1

CommonsWareに完全に同意します。しかし、行き詰まっている部分は、行の行「テンプレート」を作成する必要がある部分ですListView。は、完全なファイルからinflaterシングルを作成するために使用されます。したがって、基本的な考え方は、各行を表すxmlを作成し、そのコード全体でそれを拡張することです。Viewlayout.xml

あなたの状況では、コードを介してそれを行う必要があります。おそらく、LinearLayoutorientation = verticalを使用して親としてを追加し、幅または高さのプロパティをいくつか追加してから、2を追加TextViewして、いくつかの追加のプロパティを持つタイトルとサブタイトルにします。次に、それらをに追加する必要LinearLayoutがあります。

あなたLinearLayoutは動的に作成されたsの山でありView、xmlファイルを介して上記のすべてのコードを膨らませるのと同じ効果があります。

しかし、私は、ベストプラクティスは言うまでもなく、はるかに速く、簡単で、簡単で、より適切に実装され、そのような大騒ぎを作成することに意味がありません...

編集:あなたが持っているアダプタのどこかに:mInflater.inflate();あなたが言及したリソースを使って。前に述べたように、リソースは各行の「テンプレート」がどのようになるかを決定します。したがって、リスト行を決定する通常のxmlファイルは次のようになります。

<LinearLayout android:layout_width="fill_parent"
   android:layout_height="wrap_content" android:orientation="vertical" >
   <TextView ... /> <! --some properties you want to set -->
   <TextView ... /> <! --some properties you want to set -->
</LinearLayout>

このxmlは、の2行のリスト行を生成しListViewます。レイアウトインフレータを使用すると、上記のxmlファイルViewはすべてのバンドルを含むオブジェクトを返します。

したがって、コードから作成する場合、スニペットは次のようになります。

LinearLayout layout = new LinearLayout(context);
//layout set some properties
TextView title = new TextView(context);
//title set some properties
TextView subtitle = new TextView(context);
//subtitle set some properties
layout.add(title);
layout.add(subtitle);

これで、xmlを拡張してコンテンツを単一のViewオブジェクトにする代わりにlayout、以前にxmlを介して拡張されたすべてのロジックを含む変数がコードスニペットに含まれます。

以前にカスタムListViewアダプタを作成したことがある場合は、カスタムリスト行の作成とその動作に精通している必要があります。

編集:のアダプタのサンプルコードListView

これは、getView()単一のレイアウトを膨らませることによるアダプターの方法の標準的な手順です。

@Override
public View getView(int position, View view, ViewGroup viewgroup) {
ViewHolder holder; //our view holder of the row
if (view == null) {
   view = context.getLayoutInflater().inflate(R.layout.static_layout, null);
   holder = new ViewHolder();
   //set the views of the holder
       view.setTag(holder);
} else {
   holder = (ViewHolder) view.getTag();
}
    //rest of implementation of the View
    return view;
}

動的実装:

@Override
public View getView(int position, View view, ViewGroup viewgroup) {
ViewHolder holder; //our view holder of the row
if (view == null) {
       LinearLayout layout = new LinearLayout(context);
       //layout set some properties
       TextView title = new TextView(context);
       //title set some properties
       TextView subtitle = new TextView(context);
       //subtitle set some properties
       layout.add(title);
       layout.add(subtitle);
   //CREATING THE LAYOUT THROUGH CODE

       view = layout; //INSTEAD OF INFLATING A LAYOUT FOR THE ROW I JUST BINDED IT TO THE RECENTLY CREATED LAYOUT 
   holder = new ViewHolder();
   //bind the views of the holder to the views of the layout
       view.setTag(holder);
} else {
   holder = (ViewHolder) view.getTag();
}
    //rest of implementation of the View
    return view;
}
于 2012-07-24T23:20:30.953 に答える