0

让我解释一下自己:

如您所知,当您的视图必须多次膨胀但更改值时,您可以使用 GridView 或 ListView。这两个 Composite 视图有一些方法,例如onItemClick. 这个方法非常有用,因为它返回点击视图的位置

有了这个职位,您可以执行一些具体的任务,例如从 ArrayList 中检索该对象的信息。这是一个例子:

ArrayList<DocumentInfo> documents;

当您设置 a 时,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
}

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

谢谢!!!

4

2 回答 2

1

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

标签

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

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

因此,在您的情况下,您将拥有

documentInflated.setTag(i)

在 onClick 中,你将拥有:

int i = (int)v.getTag();
于 2013-10-10T08:25:16.020 回答
0

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

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

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

于 2013-10-10T07:26:38.750 回答