2012-03-19 63 views
5

我在我的應用程序中有五個編輯文本。我也有兩個按鈕叫做「Next」和「Previous」。現在我想選擇下一個和以前的編輯文本字段,當我點擊相應的按鈕形式動態我的視圖。有沒有辦法做到這一點。在layout.xml如何選擇下一個和上一個在視圖中編輯文本

+1

你不能用** requestFocus()方法* * – ngesh 2012-03-19 11:09:20

+0

您的意思是您想要在對應的按鈕被觸摸時將焦點從一個EditText更改爲下一個/上一個? – 2012-03-19 11:10:36

+0

@ sandy-感謝您的建議。以上是我的示例應用程序,在我的實際項目中,有近50個編輯文本字段,因此每個字段的請求焦點非常複雜。有沒有簡單的方法來做到這一點。 – Sniper 2012-03-19 11:16:56

回答

11
btnNext.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     int id = getCurrentFocus().getNextFocusDownId(); 
     if(id != View.NO_ID) { 
      findViewById(id).requestFocus(); 
      System.out.println("Next"); 
     } 
    } 
}); 

btnBack.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     int id = getCurrentFocus().getNextFocusUpId(); 
     if(id != View.NO_ID) { 
      findViewById(id).requestFocus(); 
      System.out.println("Back"); 
     } 
    } 
}); 

這是你必須將焦點設置在XML order

<EditText 
    android:id="@+id/et1" 
    android:nextFocusDown="@+id/et2" 
    android:nextFocusUp="@+id/et2" 
    ....../> 

<EditText 
    android:id="@+id/et2" 
    android:nextFocusDown="@+id/et1" 
    android:nextFocusUp="@+id/et1" 
    ...../> 

編輯

如果要創建視圖的動態,那麼你應該使用下面的方法來設置下一個焦點

setNextFocusDownId(id) 
setNextFocusUpId(id); 
+0

我可以在XLM代碼中使用它,但我在運行時創建編輯文本,所以我不能這樣做。任何建議。 – Sniper 2012-03-19 12:26:24

+1

我已更新我的答案 – Dharmendra 2012-03-19 12:30:14

+0

謝謝你的工作。 – Sniper 2012-03-19 12:37:17

3

利用

android:nextFocusLeft 

android:nextFocusRight 

android:nextFocusUp 

android:nextFocusDown 
在EDITTEXT的屬性

例如android:nextFocusDown="@id/myNextEditText"

有關如何使用它,請遵循this link.

+0

我如何在按鈕點擊事件中使用它。 – Sniper 2012-03-19 11:21:57

+0

請檢查我更新的答案,我已經提供了關注的鏈接。 或者如果你是動態生成你的視圖,即通過.java文件,那麼你可以參考我的第二個答案。 – Rajkiran 2012-03-19 11:47:51

1

嘗試 -

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.btn_next : 
      if(editText1.hasFocus()){ 
       editText2.requestFocus(); 
      }else if(editText2.hasFocus()){ 
       editText3.requestFocus(); 
      } 
      break; 
     case R.id.btn_previous : 
      if(editText2.hasFocus()){ 
       editText1.requestFocus(); 
      }else if(editText3.hasFocus()){ 
       editText2.requestFocus(); 
      } 
      break; 
    } 
} 
+0

錯誤的語法(editText1!.hasFocus())它應該是(!editText1.hasFocus())。這不會有幫助。根據你的邏輯,它只會關注edittext1和edittext2 – Dharmendra 2012-03-19 12:34:47

+0

謝謝你讓我知道。這絕對是一個錯字(和複製粘貼)。實際上這是一個語法錯誤。編輯。 – Rajkiran 2012-03-19 12:47:14

相關問題