的奇怪的錯誤,我得到這個應用程序(也就是不如順便說一句做),我需要一個的LinearLayout視圖動態地添加到的LinearLayout容器。它的工作方式是用戶在EditText中寫入內容並按下鍵盤上的「返回」鍵。當檢測到返回鍵事件時,帶有另一個EditText視圖的LinearLayout直接添加到用戶剛編輯的視圖下,焦點切換到剛添加的LineaLayout內的EditText視圖。這將在裏面創建一個帶有EditText視圖的LinearLayouts垂直列表(請參閱下面的視頻以獲取插圖)。它在我的兩個測試設備上以及我的小型alpha測試組的五個不同設備上運行良好,我似乎無法在模擬器中重新創建該錯誤。然而,當測試我老闆的設備時(他在另一個國家,所以我不能向他展示我的設備),新的EditText視圖從不會出現,並且寫在當前EditText視圖中的文本以非常錯誤的方式消失見下面的視頻)。涉及動態添加的LinearLayout視圖的LinearLayout容器
Here是一個bug的視頻。預期的行爲是插入另一個帶有兩個EditText視圖的LinearLayout(並顯示'2'而不是'1'),但是您可以看到一個新的LinearLayout沒有出現,並且文本從當前EditText中被刪除視圖。如果需要,我還可以錄製預期行爲的視頻。
的代碼看起來是這樣的:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//Create a listener for the item fields
TextView.OnEditorActionListener itemListener = new OnItemEditorListener();
nextItem.setOnEditorActionListener(itemListener);
nextItem.addTextChangedListener(new ListTextWatcher());
}
private LinearLayout addLine(int i, String text){
LinearLayout line = createline(R.layout.list_item_add);
EditText listTextView = (EditText) line.getChildAt(1);
if(!text.equals(""))
listTextView.setText(text);
itemContainer.addView(line);
int index = i + 1;
((EditText) line.getChildAt(0)).setText(index + ".");
listTextView.setOnEditorActionListener(new OnItemEditorListener());
listTextView.addTextChangedListener(new ListTextWatcher());
return line;
}
private class OnItemEditorListener implements TextView.OnEditorActionListener {
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
//Check if the current action is a keyDown event on the return button of the keyboard
if(actionId == EditorInfo.TYPE_NULL && event.getAction() == KeyEvent.ACTION_DOWN){
final EditText currentView = (EditText) view;
//if there is no text in the current field, do nothing
if(currentView.getText().toString().equals(""))
return true;
int childCount = itemContainer.getChildCount();
LinearLayout newLine = null;
//iterate through all existing item lines
for(int i = 0; i < childCount; i++){
LinearLayout currentLine = (LinearLayout) itemContainer.getChildAt(i);
//Check if the current iteration is looking at the line that had focus when return was pressed
if(currentView.equals(currentLine.getChildAt(1))){
//check if the current line is the last item, and if so add a new line
if(i == childCount - 1)
newLine = addLine(i + 1, "");
//if current line is not the last line, give focus to the next line
else
newLine = (LinearLayout) itemContainer.getChildAt(i + 1);
break;
}
}
nextItem = (EditText) newLine.getChildAt(1);
nextItem.requestFocus();
}
return true;
}
}
這裏是被添加的LinearLayout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:orientation="horizontal"
android:weightSum="1" >
<EditText
android:id="@+id/item_index"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:layout_weight="0.15"
android:background="@drawable/round_corners_left_white_background"
android:enabled="false"
android:gravity="center"
android:inputType="none"
android:text="@string/one_dot"
android:textColor="@color/ts1"
android:textSize="18sp"
android:textStyle="bold" />
<EditText
android:id="@+id/list_item"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_weight="0.85"
android:background="@drawable/round_corners_right_white_background"
android:hint="@string/new_item"
android:lines="1" />
</LinearLayout>
這是非常令人沮喪,因爲我不能給這個錯誤什麼,只要我無法重新創建它。正如前面提到的,我所訪問的設備都沒有這樣的行爲,我也無法讓模擬器做到這一點。
所表示的錯誤這兩個設備:
- 索尼愛立信Xperia PLAY(2.3.3的Android)
- 三星Nexus S(的Android 4.1.2)
設備,其中應用程序正在按預期工作:
- HTC One S(Android 4.1.1)
- 三星I9000 Galaxy S的(安卓2.3.5)
- 三星I9100 GALAXY S II(安卓2.3.4)
- 的HTC One X(Android 4.0版本)
- 谷歌Nexus 4(的Android 4.2,我認爲)
- 自動真空澱積系統設置爲兩個設備顯示我正在尋找一些建議,以找到是什麼原因造成這個錯誤,或只是一些建議,以重現錯誤的bug
。謝謝。
感謝您的反饋。您可能是對的(現在上傳更改以進行測試)。我從未想到'文本消失'只是在EditText視圖中創建新行的返回鍵,我認爲這是一種奇怪的錯誤。 – AHaahr
該死的,沒有工作。確信就是這樣。不過,我認爲你是對的,問題是正確地捕捉關鍵事件。 – AHaahr