如何正确引用布局点击?

时间:2013-10-10 07:24:24

标签: android listview gridview

让我自己解释一下:

如您所知,当您的视图需要多次膨胀,但更改值时,您可以使用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
}

你们认为这是一个明确的方法吗?

谢谢!!!

2 个答案:

答案 0 :(得分:1)

如果我没弄错的话,你想在点击它时从你创建的相对布局中获取一些数据。这里最好的解决方案是使用方法setTag(Object tag)。之后,您将获得getTag()方法的信息。此方法允许您向视图添加额外信息。正如文档中所述:

标签

与ID不同,标签不用于标识视图。标签本质上是可以与视图相关联的额外信息。它们通常用作方便在视图中存储与视图相关的数据,而不是将它们放在单独的结构中。

另外,根据您的需要,您可以使用密钥分隔每个标签 - &gt;使用方法setTag(int key,Object tag)的值对,之后可以使用getTag(int key)检索此对象;

所以在你的情况下你会有

documentInflated.setTag(i)

然后onClick中的

将具有:

int i = (int)v.getTag();

答案 1 :(得分:0)

除非我不理解你的愿望......

      @Override
        public void onClick(View v) {
            openDocument(v);
        }

v是被点击的视图。你的代码看起来应该做你希望它会做的事情。你到底看到了什么?