【问题标题】:Android add Views inside a ListViewAndroid 在 ListView 中添加视图
【发布时间】:2015-07-29 05:40:11
【问题描述】:

如何在 ListView 的 LinearLayout 中添加视图?我想在 ListView 中显示一些附加信息,并且我想将它们添加到一个 for 循环中,遍历要添加的项目。这是我目前拥有的代码:

活动:

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:scrollbars="vertical"
            android:layout_marginTop="0dp" />

</LinearLayout>

list_recycler:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:paddingRight="?android:attr/scrollbarSize">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="15dp"
        android:layout_marginEnd="6dp"
        android:layout_marginTop="6dp"
        android:layout_marginBottom="6dp">

        <TextView android:id="@+id/list_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/textColor"
            android:textSize="16sp"
            android:layout_alignParentLeft="true"/>

        <TextView android:id="@+id/list_title_summary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/textColor"
            android:textSize="16sp"
            android:layout_alignParentLeft="true"/>


        <!-- VIEWS SHOULD BE ADDED HERE -->
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

        </LinearLayout>

    </RelativeLayout>

</LinearLayout>

适配器:

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.RecyclerViewHolder> {

    public static class RecyclerViewHolder extends RecyclerView.ViewHolder {

        TextView personName;
        TextView personAge;

        RecyclerViewHolder(View itemView) {
            super(itemView);
            personName = (TextView)itemView.findViewById(R.id.person_name);
            personAge = (TextView)itemView.findViewById(R.id.person_age);
        }
    }

    List<Items> list;

    public RVAdapter(List<Items> list){
        this.list = list;
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_recycler, viewGroup, false);
        return new RecyclerViewHolder(v);
    }

    @Override
    public void onBindViewHolder(RecyclerViewHolder recyclerViewHolder, int i) {
        recyclerViewHolder.personName.setText(persons.get(i).name);
        recyclerViewHolder.personAge.setText(persons.get(i).age);
    }

    @Override
    public int getItemCount() {
        return persons.size();
    }
}

项目:

public class Items {
    String name;
    String age;

    public Items(String name, String age) {
        this.name = name;
        this.age = age;
    }
}

如何在 ListView 的 LinearLayout 中添加视图?不同ListViewItem中的每一个LinearLayout应该包含不同的view,所以不可能都一样。

我的数据会是什么样子:

ListView
    Entry1
        LinearLayout
            SubEntry1
            SubEntry2
            SubEntry3
    Entry2
        LinearLayout
            SubEntry1
            SubEntry2
            SubEntry3
    Entry3
        LinearLayout
            SubEntry1
            SubEntry2
            SubEntry3

所以Entry1..Entry3是ListViews,所有的子条目都应该是TextViews通过代码添加到对应的ListView entry里面的LinearLayout中

【问题讨论】:

  • 我不想向 ListViews 添加项目,我想在 ListView 内的 LinearLayout 内添加 Views(如 TextView)。我知道如何向 ListView 添加项目
  • 如果您想在您的 ListView 自定义行中“添加”一个 TextView,为什么不在布局中已经使用属性 android:visibility="gone" 将它放在那里。然后在您希望它在自定义适配器中可见的选定行上将其属性更改为“VIEW.VISIBLE”。
  • 因为我不知道会有多少 TextView,因为数据是从网络上解析出来的,而且每天都在变化
  • 您知道最大数量还是根本不知道?如果你这样做了,那么只需将最大数量设置为“已消失”并将所需数量设置为每行上的 view.visible 吗?

标签: android android-layout listview view android-linearlayout


【解决方案1】:

给布局一个id,比如@+id/item_content,然后在你的getViewdo 中:

itemContent = (LinearLayout)convertView.findViewById(R.id.item_content);
itemContent.removeAllViews();
//then you can add your views to the layouts depending on each item here using 
itemContent.addView(yourView);

您不能简单地遍历 ListView 项目并向其添加内容。这就是我们使用适配器的目的。更新数据并通知适配器数据已更改。

我建议你在这种情况下使用RecyclerView

编辑

您添加的不是数据结构,而是您的布局结构。不管怎样,你应该有这个。

public class RowItem {
    private final String title;
    private final String desc;
    private ArrayList<String> contents;
}

然后你会这样做;

itemContent = (LinearLayout)convertView.findViewById(R.id.item_content);
itemContent.removeAllViews();
//then you can add your views to the layouts depending on each item here using 
for(String item : rowItem.getContents()){
    TextView textView = new TextView(parent.getContext());
    textView.setText(item);
    itemContent.addView(textView);
}

阅读RecyclerViewExpandableListView

【讨论】:

  • 能否请您再发布一些代码,我将如何实现它?
  • @Broadwell 告诉我们您的数据是什么样的。
  • "我建议您在这种情况下使用 RecyclerView。"这个建议没有给出任何理由;您的答案同样适用于 ListView:即 当获取数据时,更新适配器。适配器应该构建每个项目视图并根据请求位置的项目对其进行自定义
  • 我更新了问题,现在正在使用 RecyclerView
  • 我应该把这段代码放在哪里?在适配器中?或者我在哪里将数据加载到适配器中?
猜你喜欢
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 2012-09-28
相关资源
最近更新 更多