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