android - 使用适配器在 Listview 中填充 Listview

标签 android listview android-fragments android-listview android-adapter

我有一个 fragment 。他的 onCreateView 方法上的这个 fragment 加载的 View 有一个 ListView(A)(填充在 Adapter(A) 中)。但是,此 ListView(A) 内部有另一个 ListView(B)。所以现在,我必须调用适配器 (B) 来填充此 ListView (B)。如果我从 fragment 调用它,我得到一个空指针,如果我从 Adapter(A) 调用它,它不会崩溃,但它不起作用。

如何在另一个适配器中调用一个适配器。

这是 fragment 的代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mContentView = inflater.inflate(R.layout.fragment_kidscontacts, container, false);
    mAdapter = new KidsContactsAdapter(getActivity());
    final ListView list = (ListView) mContentView.findViewById(R.id.listViewKidsContacts);
    list.setAdapter(mAdapter); 
    return mContentView;
}

其中 mAdapter 是对我创建的 Adapter(A) 的调用。 mContentView 是一个简单的 View 。 现在,在 Adapter(A) 的代码中,我创建了一个名为 holder 的 Holder 对象(它保存 xml 中的元素)。

public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder; //this is the holder object I created

    if (convertView == null) { //View received from parameter.
        convertView = LayoutInflater.from(mContext).inflate(R.layout.kids_contacts_list_item, parent, false);
        holder = new ViewHolder(); 
        holder.listViewKidsContacts = (ListView) convertView.findViewById(R.id.insidelistViewKidsContacts); //ListView(B)
        holder.kidImage = (ImageView) convertView.findViewById(R.id.kid_image);
        holder.statusImageView = (ImageView) convertView.findViewById(R.id.status_image_view);
        holder.nameTxtView = (TextView) convertView.findViewById(R.id.kid_friend_txtview);
        holder.statusTextView = (TextView) convertView.findViewById(R.id.kid_status_txtview);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    //Some work I do with the holder items assigning them 

    //Trying to fill the ListView(B)
        KidsInsideContactsAdapter mAdapter = new KidsInsideContactsAdapter(((Activity)mContext)); //This is the adapter(B)
        holder.listViewKidsContacts.setAdapter(mAdapter); //Assign the adapter(B) to the ListView(B)

    return convertView;
}

我在适配器 (B) 中有一些日志,但它们没有显示在 LogCat 中。 ListView 也没有填充。它显示好像没有 ListView 。但是在xml中有它。

最佳答案

可能发生的一件事是第二个 ListView 的高度设置不正确,因为它在另一个 ListView 中。我可能不得不处理一次。

尝试在您的第一个适配器中使用此方法来设置 ListView 的高度 - (在您设置适配器之后) 类似于 setListViewHeightBasedOnChildren(holder.listViewKidsContacts);

//动态设置ListView高度的方法

public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null)
        return;

    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED);
    int totalHeight = 0;
    View view = null;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        view = listAdapter.getView(i, view, listView);
        if (i == 0)
            view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT));
        view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
        totalHeight += view.getMeasuredHeight();
    }
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
    listView.requestLayout();
}

如果这不起作用,我会尝试在行上设置断点: KidsInsideContactsAdapter mAdapter = new KidsInsideContactsAdapter(((Activity)mContext));//这是适配器(B) holder.listViewKidsContacts.setAdapter(mAdapter);//将适配器(B)分配给ListView(B)

调试时检查 mAdapter 是否为空。还在 KidsInsideContactsAdapter 的构造函数中放置断点,以查看是否一切正常。

同时检查以确保 holder.listViewKidsContacts 是您在调试时要查找的 ListView 。

关于android - 使用适配器在 Listview 中填充 Listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32256903/

相关文章:

android - 如何获取 ListView 中 EditText 的文本?

android - 有什么办法可以嵌入可滚动的标签吗?

android getSupportActionBar() 在 fragment 中返回 null

android - 使用 ktor 发送推送通知

android - 将 Android 应用程序图标转换为 iOS 应用程序图标

Android:带复选框的ListView

android - ListView 和页脚 - 如何消除它们之间的空间?

android - Listview OnItemClickListener 在 MainActivity 上工作但不在类似的 TaskActivity 上工作

android - 如何在抽屉导航中传递默认 MenuItem?

android - 为自定义操作栏项目设置 onClick 事件