2013-10-10 66 views
0

让我来解释一下自己:如何正确引用布局点击?

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

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

ArrayList<DocumentInfo> documents; 

当你设置一个setOnItemClickListener()你可以得到正确的值:当你不使用一个GridView或ListView控件,

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); 
} 

但是,你在你的拥有。你没有一个明确的方法(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 
} 

你们认为这是这样做的明确的方式?

谢谢!

回答

1

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

标签

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

也取决于您的需求,您可以使用setTag(int key,Object tag)方法将每个标签与一个键 - >值对分开,之后您可以使用getTag(int key)检索此对象。

所以你的情况,你将有

documentInflated.setTag(i)

在onclick哟届时将有:

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

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

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

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

+0

我可能无法正确解释自己。让我编辑我的问题,并尽快再次检查! – Reinherd

+0

完成。请重新阅读该问题! – Reinherd

+0

好吧,但实际上你在做什么呢?你存储的位置,然后你可以完全按照你的要求访问它(你也可以通过get/setTag()来存储/获取它)为什么这不是写成的? –