让我自己解释一下:
如您所知,当您的视图需要多次膨胀,但更改值时,您可以使用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)知道哪个布局是被点击的(我的意思就像前面的例子,“位置”值)。
我目前正在做的是以下内容:
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
}
你们认为这是一个明确的方法吗?
谢谢!!!
答案 0 :(得分:1)
如果我没弄错的话,你想在点击它时从你创建的相对布局中获取一些数据。这里最好的解决方案是使用方法setTag(Object tag)。之后,您将获得getTag()方法的信息。此方法允许您向视图添加额外信息。正如文档中所述:
标签
与ID不同,标签不用于标识视图。标签本质上是可以与视图相关联的额外信息。它们通常用作方便在视图中存储与视图相关的数据,而不是将它们放在单独的结构中。
另外,根据您的需要,您可以使用密钥分隔每个标签 - &gt;使用方法setTag(int key,Object tag)的值对,之后可以使用getTag(int key)检索此对象;
所以在你的情况下你会有
documentInflated.setTag(i)
将具有:
int i = (int)v.getTag();
答案 1 :(得分:0)
除非我不理解你的愿望......
@Override
public void onClick(View v) {
openDocument(v);
}
v
是被点击的视图。你的代码看起来应该做你希望它会做的事情。你到底看到了什么?