我有一个画廊,我正在显示一些身份证作为图像。 当用户点击图片时,我想将图片更改为另一张图片,显示卡片的“背面”。
我将一个对象的arraylist绑定到图库,每个对象包含前后图像。
我有两个图像视图,一个用于前视图,一个用于后视图。图库将首先显示所有正面图像(“背面”图像视图可见性设置为GONE)。我的想法是在用户点击时更改相关图片视图的可见性。
这就是我所拥有的,购买我不知道如何实现点击功能来更改视图。
非常感谢任何协助。
答案 0 :(得分:0)
Gallery
是AdapterView
的特化,其中还包含ListView
,Spinner
,GridView
...所有这些都有共同的显示n次与不同数据相同的'种类'。
这些特定视图使用Adapter
来处理视图创建和填充过程。在适配器上调用getView
方法,为此类提供用于为特定行(单元格,库项目...)创建视图的数据。
当getView
认为必要时调用AdapterView
方法,开发人员无法控制创建视图或何时创建视图。
因此,实际上不可能直接修改AdapterView
的孩子。这将导致修改被任意覆盖,甚至转移到视图的另一行。
相反,要对子视图执行操作,必须对用于填充视图的数据执行操作。 (请注意,这会强制执行MVC模型,因为视图仍然是模型的反映,而不是由控制器操纵。)
在此特定示例中,视图将根据数据的checked
状态显示不同的图像。为此,请向模型添加checked
成员:
public class MyModel {
// ... Other members
public boolean checked = false;
}
在getView中使用该值:
@Override
public View getView(int position, View convertView, View parent) {
MyModel current = getItem(position);
// ... Inflate and populate
if (current.checked) {
// Specific checked behavior
} else {
// Not checked behavior
}
}
要在控制器中修改checked
值,可能是OnItemClickListener
:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Here, there can be several ways to access the clicked item.
// I assume myAdapter is the adapter used for the gallery
MyModel current = myAdapter.get(position);
current.checked = !current.checked;
myAdapter.notifyDataSetChanged();
}