我想创建一个返回动态创建的RelativeLayout
的方法。为了清楚起见,让我们使用这个简化的例子:
private RelativeLayout createLayout() {
RelativeLayout layout = new RelativeLayout(activity);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
layout.setLayoutParams(params);
TextView tv1 = new TextView(activity);
tv1.setText("Text 1");
TextView tv2 = new TextView(activity);
tv2.setText("Text 2");
TextView tv3 = new TextView(activity);
tv3.setText("Text 3");
layout.addView(tv1);
layout.addView(tv2);
layout.addView(tv3);
return layout;
}
现在我想将这些TextView
相对于彼此定位。为此,我希望LayoutParams
方法使用addRule
。
但是这种方法需要一个ID,例如addRule(RelativeLayout.BELOW, tv2Id)
。这意味着我必须为每个TextView
设置一个ID。
我的问题是createLayout方法会被多次调用,所以问题是:
每次调用方法时,是否必须为TextView
设置不同的ID以避免冲突?如果是这样,我该怎么做?
最常见的是,有没有更好的解决方案呢?
修改
这背后的想法是拥有一种ListView
,其中每个项目都包含Map
(可以显示或隐藏)。
问题:如果地图位于ListView
内,则无法滚动(至少我没有设法做到这一点)。
为此,我决定使用ScrollView
和LinearLayout
来复制ListView
的行为。这样Map
可以正确滚动,现在,我所要做的就是动态创建项目
答案 0 :(得分:1)
ID不一定是唯一的。正如您从extract
中看到的那样setId(int id)
设置此视图的标识符。标识符在此视图的层次结构中不必是唯一的。标识符应为正数。
但是就像你说的那样,如果你想避免冲突,那么你必须找到一种为每个视图生成唯一标识符的方法。
坦率地说,IMO我认为身份证的重要性并不重要。您可以使用10,20,30。只需确保您可以随时使用static final
变量访问它们。
你问是否有更好的解决方案,是的。最优选的方法是膨胀xml布局。