【问题标题】:List with two different designs for odd/even items列出奇数/偶数项目的两种不同设计
【发布时间】:2018-07-19 20:29:52
【问题描述】:

假设我们有两种不同的列表项设计。

我希望出现在奇数位置的列表项具有第一个设计,而出现在偶数位置的列表项具有第二个设计。

是否可以使用两个 XML 文件和一个 ArrayAdapter 来实现这个目标?

【问题讨论】:

    标签: android android-layout listview android-arrayadapter


    【解决方案1】:

    要自定义每个项目的外观,您可以覆盖 数组中对象的 toString() 方法。或者,创建一个视图 对于除 TextView 之外的每个项目(例如,如果 你想要每个数组项的 ImageView),扩展 ArrayAdapter 类并覆盖 getView() 以返回您想要的视图类型 每个项目。

    https://developer.android.com/guide/topics/ui/declaring-layout#AdapterViews

    就我个人而言,我只会使用一个 recyclerView.Adapter,你可以很容易地使用那些大量的例子来做到这一点。

    【讨论】:

      【解决方案2】:

      您可以像这样(在 Kotlin 中)循环遍历数组的元素并根据索引扩展不同的布局:

      for ((i, item) in list.withIndex()){
          val row = if (i % 2 == 0) LayoutInflater.from(context).inflate() // inflate layout 1
          else LayoutInflater.from(context).inflate() // inflate layout 2
      
          ...
      
          listView.addView(row)
      }
      

      其中布局 1 和布局 2 是您的 2 个设计的 xmls

      【讨论】:

        【解决方案3】:

        是的。您只需要根据位置(偶数/奇数)扩展布局。 在您的 arrayadapter 的 getView() 方法中,执行以下操作:

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                if (position % 2 == 0) {  //  is even
                    convertView = LayoutInflater.from(getContext()).inflate(R.layout.even_layout, parent, false);
        
                } else {    //  is odd
                    convertView = LayoutInflater.from(getContext()).inflate(R.layout.odd_layout, parent, false);
                }
            }
            return convertView;
        }
        

        【讨论】:

          猜你喜欢
          • 2011-12-18
          • 2010-11-01
          • 1970-01-01
          • 2017-04-05
          • 1970-01-01
          • 2017-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多