[英]How do you keep layouts clicks correctly referenced?
让我解释一下自己:
如您所知,当您必须多次放大一个视图但要更改其值时,可以使用GridView或ListView。 这两个Composite视图具有一些方法,例如onItemClick
。 此方法非常有用,因为它返回单击的视图的位置 。
在这个位置上,您可以执行一些具体的任务,例如从ArrayList中检索该对象的信息。 这是一个例子:
ArrayList<DocumentInfo> documents;
并且,当您设置setOnItemClickListener()
您可以获得正确的值:
gallery.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View v, int pos, long arg3) {
getDocumentInfoOf(pos);
}
});
public void getDocumentInfoOf(int position){
DocumentInfo doc = documents.get(position);
}
但是,当您不使用GridView或ListView时,您就属于自己。 您没有明确的方法(AFAIK)来了解单击的是哪个布局已膨胀(我的意思是像上一个示例一样,“ position”值)。
我当前正在做的事情如下:
for (int i=0; i<10;i++){
RelativeLayout documentInflated = (RelativeLayout) this.mInflater.inflate(R.layout.open_document_per_inflar, null);
documentInflated.setContentDescription(""+i);
documentInflated.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
openDocument(v);
}
});
container.addView(documentInflated);
}
public void openDocument(View v){
int idDocument = Integer.parseInt(v.getContentDescription());
//idDocument is the view clicked
}
你们认为这样做是一种清晰的方法吗?
谢谢!!!
如果我没记错的话,当您单击它时,您想从创建的相对布局中获取一些数据。 最好的解决方案是使用setTag(Object tag)方法。 之后,您可以使用getTag()方法获取信息。 此方法使您可以向视图中添加其他信息。 如文档中所述:
标签
与ID不同,标签不用于标识视图。 标签本质上是可以与视图关联的额外信息。 它们最常用于方便地在视图本身中存储与视图相关的数据,而不是将它们放在单独的结构中。
另外,根据您的需要,可以使用setTag(int key,Object tag)方法用键->值对分隔每个标签,然后再使用getTag(int key)检索此对象;
因此,在您的情况下,您将拥有
documentInflated.setTag(i)
在onClick中,您将拥有:
int i = (int)v.getTag();
除非我不明白你的愿望...
@Override
public void onClick(View v) {
openDocument(v);
}
v
是否正在单击视图。 您的代码看起来应该像您希望的那样执行。 您实际上看到了什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.