0

我在for循环中有for循环(for for循环)。每个for循环加载至少一个视图,其中一些视图的负载大于1.所有视图(textviews,imageviews)都被加载到相对布局或线性布局中,并且这些布局都被加载到一个线性布局中,所有这些都是在scrollview中。在android中以编程方式加载大量视图?

我知道困惑,可能是最糟糕的做法。我查了不同的东西,其中大部分是listview相关的,如无尽的适配器或延迟加载。我不认为listview会为我正在尝试做的工作。我有记忆问题这样做。

所以我想我的问题是什么将ListView是正确的方向去?我仍然可以使用for for for for循环吗?

考虑每个块表示一个布局(每个布局组成textviews,只有黑盒子具有imageviews和textviews),并且还考虑每个颜色表示一个for循环。黑色的边框表示所有这些视图和其他布局都被引入的线性布局。请记住,它并不总是将是红色和蓝色框

回答

1

我不知道我是否真的得到了你想要的东西,但在我看来,你应该使用Adapter应该

这样做与你所说的布局会导致内存问题,因为你正在加载一个复杂的视图层次结构,android正在绘制所有的视图(甚至那些不可见的视图),并且你的视图都没有被重用。

使用ListView并定义不同类型的AdapterView你应该能够做你需要的。

例如让我们说每个红色框是一个AdapterView。所以从你的计划你会有2 AdapterView,让我们称之为“ViewOneBlueTwoBlack”和“ViewOneBlueThreeBlack”。也可以说你有更多的类型AdapterViews“ViewTwoBlueTwoBlack”,“ViewTwoBlueFiveBlack”等等...... 现在你需要做的是在你的Adapter中处理条件知道什么时候应该加载每种类型的AdapterView。

或者,如果您认为红框是分区,然后蓝框变为AdapterViews,甚至会更好。

您可以在ListViewsAdapter在这里找到一个很好的教程:http://www.vogella.com/tutorials/AndroidListView/article.html

而且你的计划看起来很像一个ExpandableListView检查出来,以防万一。

+0

我喜欢你的想法,创建不同的adapterviews我可能会最终这样做。 expandablelistview是一些相关但expandablelistview似乎创建我不想要的下拉项目。 – Marke

+0

您可以使用ExpandableListView而不使用折叠功能,请检查http://stackoverflow.com/questions/6978434/how-to-keep-the-expandablelistview-opened。在http://stackoverflow.com/a/29834484/665823中,您可以找到它的外观和图片。你会明白为什么你的计划让我想到这一点;) – Kalem

0

下的黑盒子相同量“因此,我想我的问题是什么将的ListView是向正确的方向去吗?我仍然可以使用我for for for for循环吗?“

的回答是正确的方向取决于你的情况下,如果你的目标可以同时实现再看看哪种方法,你的情况至少观点或部件有很多的布局,但如果你使用的ListView有可能是一个。 Bt在开发最好的方式是满足客户的要求的任何方式..

0

我建议你使用这个表格布局。在xml文件中声明一个表格布局,并动态添加视图。

我给出了类似的答案here,您可以自定义解决方案以使行中只有一个视图并相应地对齐。

1

你应该明确地使用一个ListView和一个adpater。

您可以在ListView中使用diffenet视图类型。要做到这一点,你应该有一个这样的适配器:

public class YourAdapter extends BaseAdapter { 
    private static int HEADER_TYPE = 0; 
    private static int CONTENT_TYPE_1 = 1; 
    private static int CONTENT_TYPE_2 = 2; 

    @Override 
    public int getViewTypeCount() { 
      return 3; 
    } 

    @Override 
    public int getItemViewType(int position) { 
      if (header) 
       return HEADER_TYPE; 
      else if (content_type_1) 
       return CONTENT_TYPE_1; 
      else 
       return CONTENT_TYPE_2; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      if (getItemViewType(position) == HEADER_TYPE) { 
        //make header view 
      } else if (getItemViewType(position) == CONTENT_TYPE_1 { 
        //make content view 
        //be careful position is the position in the list view 
      } else { 
        //make content view 
        //be careful position is the position in the list view 
      return convertView; 
     } 
} 

在getView访问您的DATAS时,您要小心,现在的位置是在ListView的位置。

相关问题