0

各項目に TextItem と ListView (動的な長さ) が含まれる ListView を作成しようとしていますが、何らかの理由で内部の ListView に項目が 1 つしか表示されません。これは不可能なことですか、それとも何か間違ったことをしていますか?

これが私のレイアウトです:

<?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">
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/outerListId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</LinearLayout>

内部リスト項目:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Profile Name"
        android:id="@+id/nameId"/>
    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/innerListId"/>
</RelativeLayout>

コード:

public class ListAllActivity extends Activity {

    protected class MyListItem {
        public String name;
        public List<String> items;

        public MyListItem(String name) {
            this.name = name;
            this.items = items();
        }

        public List<String> items() {
            ArrayList<String> strings = new ArrayList<String>();
            strings.add("item1");
            strings.add("item2");
            return strings;
        }
    }

    public class CustomListViewAdapter extends ArrayAdapter<MyListItem> {
        Context context;

        public CustomListViewAdapter(Context context, int resourceId, List<MyListItem> items) {
            super(context, resourceId, items);
            this.context = context;
        }

        private class ViewHolder {
            TextView nameText;
            ListView myList;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            MyListItem rowItem = getItem(position);

            LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.profile_exercises_list_item, null);
                holder = new ViewHolder();
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.nameText = (TextView) convertView.findViewById(R.id.profileNameListItemId);
            holder.myList = (ListView) convertView.findViewById(R.id.innerListId);
            List<String> items = rowItem.items();
            holder.nameText.setText(rowItem.name);
            ArrayAdapter<String> myarrayAdapter = new ArrayAdapter<String>(convertView.getContext(), android.R.layout.simple_list_item_1, items);
            holder.myList.setAdapter(myarrayAdapter);
            holder.myList.setTextFilterEnabled(true);

            return convertView;
        }
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylayout);

        ListView listView = (ListView) findViewById(R.id.outerListId);

        ArrayList<MyListItem> allItems = new ArrayList<MyListItem>();
        allItems.add(new MyListItem("name1"));
        allItems.add(new MyListItem("name2"));

        CustomListViewAdapter all = new CustomListViewAdapter(this, android.R.layout.simple_list_item_1, allItems);
        listView.setAdapter(all);
        listView.setTextFilterEnabled(true);
    }
}
4

1 に答える 1

1

ネストされた ListView を使用する代わりに、Expandable ListView を使用できます。拡張可能な ListView を操作するための便利なリンクを次に示します。
http://www.dreamincode.net/forums/topic/270612-how-to-get-started-with-expandablelistview/
http://android-adda.blogspot.com/2011/06/custom-expandable-listview. html

于 2013-07-18T19:16:51.533 に答える