列表视图自定义行

Posted

技术标签:

【中文标题】列表视图自定义行【英文标题】:List View custom row 【发布时间】:2015-12-22 04:07:08 【问题描述】:

我有 2 行的列表视图,我希望第一行包含一个文本和一个微调器,第二行包含一个文本和一个 editText...有人可以帮助我使用 getview 方法吗?

【问题讨论】:

一个列表视图来做到这一点?列表视图项内的微调器?不要那样做……这是一个糟糕的 UI/UX。如果您只需要 2“行”,请使用带有滚动视图的线性布局(如果超出屏幕) 【参考方案1】:

--编辑:抱歉,我没注意到你也想要一个 Spinner。如果有任何用处,我将把我的帖子留给#getView() 部分。 --

首先创建一个单独的 .xml 文件,其中包含 res/layout 文件夹中每个 ListView 项目的布局属性,如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/hm"
    android:layout_
    android:layout_>
<TextView
    android:layout_
    android:layout_
    android:text="text1"
    android:id="@+id/text1" />
<TextView
    android:layout_
    android:layout_
    android:text="text2"
    android:id="@+id/text2" />
</RelativeLayout>

然后你必须创建一个新的 ArrayAdapter 并像这样覆盖 #getView():

    @Override
    public View getView(final int position, View view, final ViewGroup parent) 
        final LayoutInflater inflater = activity.getLayoutInflater();
        view = inflater.inflate(R.layout.list_single, parent, false); //R.layout.list_single is what I named above .xml layout
        TextView label = (TextView) view.findViewById(R.id.text1); //R.id.text1 is the id we gave the first TextView in the .xml layout
        TextView txt = (TextView) view.findViewById(R.id.text2); //R.id.text2 is the id we gave the second TextView in the .xml layout
        final Item details = list.get(position); //Item = object type you want to get information from, list = a List of the items that are in the ListView
        label.setText(details.name); //sets the text
        txt.setText(details.surname); //sets the text
        return view;
    

请注意:这是#getView() 的基本版本。

查看ViewHolder 模式,了解处理获取视图的更有效方法。

【讨论】:

【参考方案2】:
public View getView(int position, View convertView, ViewGroup parent) 
View v = convertView;
int posType = getItemViewType(position);
if (v == null) 
    LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (posType == 0) 

        v = inflater.inflate(R.layout.layout1, parent, false);
    
    else 
        v = inflater.inflate(R.layout.layout2, parent, false);
    

return v;

【讨论】:

您可以在第一个布局和 textview 中使用 textview 和 spinner,并在上述共享代码中的另一个布局中编辑文本 好的..如果我想要超过 2 行.. 解决方案是什么? 如果我只在线性布局中这样做,它看起来不像列表视图

以上是关于列表视图自定义行的主要内容,如果未能解决你的问题,请参考以下文章

drupal 7 使用模块视图自定义行样式

具有自定义行布局的 ListView - Android

ListView 从 EditText 更新

SwiftUI 列出多个自定义行编辑选项

为什么ListView与自定义适配器显示什么?

每行具有不同布局的Android ListView