2011-05-12 21 views
3

對於android和編程一般來說是新手,因此學習概念和我一樣。獲取所選編輯文本的索引和ID以進行進一步處理

我有一個LinearLayout動態添加edittexts。

我需要能夠獲得任何編輯文本的索引和ID時,它被選中或焦點。

我試圖通過兒童數的循環檢查選擇,像這樣:

int count = llmain.getChildCount(); 
     for (int i=0; i< count; ++i) { 
      if ((llmain.getChildAt(i).isSelected()) == true){ 
      //Do Stuff 
      } 

,但我不知道如果甚至關閉,這將是隻爲指數.....

幫助將不勝感激!

感謝

編輯:仍然沒有一種可靠的方法來實現這一目標。下面的

if(v instanceOf EditText) { 
id = v.getId(); 
index = ll.indexOfChild(v); 

的示例返回指數-1和id的十個位數號碼,但是,我對分配創建一個ID。 ?奇怪的是,「if」中的代碼正在運行,所以它至少認爲它具有重點視圖。現在,如果我改變「的instanceof」像

if (v != null){ 
      id = v.getId(); 
      index = llmain.indexOfChild(v); 

空檢查,我添加了一個setFocusableInTouchMode(真),我得到合理的回報,但是,它然後就像我叫clearFocus(),因爲沒有的EditTexts的重點。這是我完整的概念代碼證明,它返回正確的值,但不再讓EditTexts實際上有焦點。

@Override 
public boolean dispatchKeyEvent(KeyEvent event) { 

    if ((event.getAction() == KeyEvent.ACTION_DOWN) &&(event.getKeyCode() == 66)) // KeyEvent.* lists all the key codes u pressed 
    { 
     View myView = linflater.inflate(R.layout.action, null); 
     myView.setId(pos); 
     pos++; 
     myView.setFocusableInTouchMode(true); 
     llmain.addView(myView); 
     myView.requestFocus(); 
     View v = llmain.findFocus(); 

     if (v != null){ 
      id = v.getId(); 
      index = llmain.indexOfChild(v); 
      Context context = getApplicationContext(); 
      CharSequence text = "index is:" + index + "id is:" + id; 
      int duration = Toast.LENGTH_SHORT; 

      Toast toast = Toast.makeText(context, text, duration); 
      toast.show(); 
      } 


    } 
    return false; 
}  

此,除非我評論的setFocusableInTouchMode行返回正確的價值觀,那麼它可以追溯到奇-1指數和十個位數的ID。我究竟做錯了什麼?將必須是一個很好的(和工作)的答案來獲得我的代表的一半.....

所以沒有人有這個解決方案?它仍然讓我瘋狂!

再次感謝

+0

Ĵ如果(... isSelected())' – kcoppock 2011-05-12 16:33:08

回答

5

我最初的想法是將一個EditText時設置的ID等於指數,假定只有EditTexts將在這個特殊的佈局:

LinearLayout llMain = (LinearLayout)findViewById(R.id.llmain); 
EditText editText = new EditText(this); 
//0-based index, so get the number of current views, and use it for the next 
editText.setId(llMain.getChildCount()); 
llMain.addView(editText); 

然後,檢索信息,把支票存入某種(onTouch,聚焦狀態,類似的東西)的監聽器:

@Override 
public void onTouch(View v, MotionEvent ev) { 
    int indexAndId = v.getId(); 
} 

給這一個鏡頭:

LinearLayout ll = (LinearLayout)findViewById(R.id.ll); 
int index, id; 

//finds the currently focused View within the ViewGroup 
View v = ll.findFocus(); 

if(v instanceOf EditText) { 
    id = v.getId(); 
    index = ll.indexOfChild(v); 
} 
+0

我最初打算使用類似這樣的東西,但是我將在已經存在的其他人之間隨機插入新的edittext,所以我會得到重複的ID,索引將向下移動,但身份證不會扔掉所有東西。 – chris 2011-05-12 17:29:12

+0

啊好的。那麼,你能描述一下你將如何使用獲得ID和索引的結果嗎?你將從哪裏訪問它?我們可以在更多的背景下爲您提供更好的解決方案。 – kcoppock 2011-05-12 17:36:54

+0

好吧,獲取索引是我可以在視圖中獲得它的位置,以便在它之後插入新的索引。這個ID是我可以唯一地參考它的動態刪除。例如:5個edittexts,一個接一個。我動態地在#3和#4之間增加一個新的edittext,然後我可能會刪除#2及其內容。那麼我可以在現在的#1和#3(已經成爲索引中的#2,但保留了相同的ID)之間添加一個,這是否使得它更清楚,即時通訊並不總是善於解釋自己? – chris 2011-05-12 20:01:09

1

這似乎是它的工作對我來說,你測試,它不工作?

llmain.getChildAt(i).getId();將返回視圖ID給你。

+0

測試,調整,再次測試.....我似乎沒有得到任何東西在給我所選視圖的id和索引(edittext)時可靠地工作。似乎無法得到任何代碼工作的東西,似乎應該更容易。你的代碼段確實可以讓我的編號:) – chris 2011-05-14 00:58:24

相關問題