繁体   English   中英

如何保持正确引用布局点击?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM