我正在寻找一种在略微不同的环境中重用数据列表的有效且可重用的方法。
我所拥有的是如下列表:
[Bitmap] PlayerName
[Bitmap] PlayerName
...
这些存储为我从Cursors获得的ArrayLists,并且可以移动,因此我可以根据需要移动它们。
我遇到的问题是我想重新使用图片和名称,但在行内更改信息。
我的意思是:
当我在第一个列表中显示玩家时,我有一个删除按钮,可以从整个游戏中删除该玩家。
在另一个列表中,我还使用了一个删除按钮,但这是从游戏的特定实例中删除它们。
在这两个实例中,我都有一个带有列表的Remove
按钮,当我构建ListaAapter来选择按钮的功能时,我使用了懒惰的hackery。 listitems本身没有监听器,只有按钮。
我现在想再次重复使用播放器列表,但是可以点击整个项目(即使用OnItemClickListener或其他类似的东西),然后在它们旁边放一个数字(按照它们被点击的顺序)。
我想我可以在Remove
框下添加一个TextView并将其连接到相同的东西,并根据需要使TextView和Button可见,但这似乎是一种非常糟糕的管理方式。
如何将演示文稿与此实例中的数据分开?
潜在解决方案
1 根据使用布局的建议,我有一个像这样的构造函数:
public PlayerListAdapter(Context context, ArrayList<Player> players, GameInstance gameInstance) {
super(context, R.layout.row_player_empty, players);
this.context = context;
this.players = players;
this.gameInstance = gameInstance;
}
我是否会为该构造函数添加一个int布局,然后更改我的getView和onClick方法以使用该布局来驱动不同的数据源?
2。
我看过的另一个解决方案是'合并'布局。在这里,我创建了一个基础“播放器”,然后为每组额外的UI元素,我将基础作为新布局包装到其他元素中。这至少意味着我正在重新使用字体/大小/边距等。
我可能更倾向于动态地叠加元素,但至少如果我改变基本样式我只做了一次而不是3次。
答案 0 :(得分:0)
您可以使用不同的xml管理这两个列表。 从片段/活动中,您可以传递您正在查看的列表视图,并在其上进行调整,您的xml中的2个布局将会膨胀,您可以设置值。
在第一种情况下,你只需要删除按钮可点击,所以你只能设置监听器,在第二种情况下你需要整个按钮可点击,所以你可以设置onClickListner当你设置那种列表视图xml。
你有2例: 在第一种情况下,你应该在构造函数中传递任何boolean或enum类值,这样你就可以识别我需要填充哪种xml
在膨胀视图之前的getView()中,您应该比较该值并依赖于该值,您应该填充xml,如:
getView(){
if(case1){
View view = mInflater.inflate(R.layout.case_one_layout, null);
//set all values and listener on delete button as your require.
}else if(case2){
View view = mInflater.inflate(R.layout.case_two_layout, null);
//here you can set listener on entire row as onItemclick from fragment.
}
}
您也可以根据需要使用开关或其他方式进行管理。