0

私はプロジェクトに取り組んでおり、メイン レイアウトには ListView が含まれています。ビューにサブアイテムを動的に追加したいListViewItem。私の主なレイアウトは次のとおりです。

main_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="fill_parent" >
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="TextView"/>

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true" >
    </ListView>
</RelativeLayout>

list_item.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="50dip"
    android:background="@android:color/transparent" >

</LinearLayout>

そして、次のプロパティでTextView返さviewれたものに追加したい:getView

  1. 高さ: fill_parent
  2. : wrap_content
  3. Text : テキスト ビュー アイテム

    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) this.M_context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.list_item, parent, false);
    
        return convertView;
    }
    

サブアイテムを ListViewItem に動的に追加したいことに注意してください。TextView の配列があり、この Items を使用して listView を埋めたいと考えることができます。このシナリオを実行するにはどうすればよいですか? 他のスレッドやGoogleで検索しても結果が見つかりません。それで、誰か私の問題を解決するのを手伝ってくれませんか?

前もって感謝します :)

4

1 に答える 1

1

これが私の getView() メソッドでした。

main.xml

<ListView
    android:id="@android:id/list"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_below="@+id/button1"
    android:cacheColorHint="@android:color/transparent"
    android:divider="#00ff00"
    android:fastScrollEnabled="true"
    android:focusable="false"
    android:listSelector="#000000"
    android:paddingTop="5dp"
    android:saveEnabled="true" >
</ListView>

item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

アダプタ

 class CustomAdapter extends ArrayAdapter<String> {

    public CustomAdapter(Context context, int resource, List<String> objects) {
        super(context, resource, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;

        /*convertView = mInflater.inflate(R.layout.item, null);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
        holder = (ViewHolder) convertView.getTag();

        holder.getAppName().setText(str.get(position));*/

        if(position==0)
        {
            ImageView iv = new ImageView(getApplicationContext());
            iv.setBackgroundResource(R.drawable.ic_launcher);
            convertView = iv;
        }
        else if(position==1)
        {
            TextView tv = new TextView(getApplicationContext());
            tv.setText("text view");
            convertView = tv;
        }
        else
        {
            EditText et = new EditText(getApplicationContext());
            et.setText("ET go home");
            convertView = et;
        }

        return convertView;
    }

    private class ViewHolder {
        private View pathRow;
        private TextView appNameView = null;

        public ViewHolder(View row) {
            pathRow = row;
        }

        public TextView getAppName() {
            if (null == appNameView) {
                appNameView = (TextView) pathRow.findViewById(R.id.tv);
            }
            return appNameView;
        }
    }
}

コメントアウトされた部分は以前のものです。その下のコードは、ビューを動的に生成して返すために使用したものです。私のlistitem.xmlにはまだtextViewがあります。しかし、アダプタは getView() から返されるビューを設定します。これは私にとってはうまくいきます。

あなたのitem.xmlでLinearLayoutのポイントが本当にわかりません。独自のコードでそれを行うことができます。

于 2012-09-02T16:42:02.927 に答える