Android - программно изменение макета строки пользовательской строки списка.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android - программно изменение макета строки пользовательской строки списка.

Сообщение Anonymous »

У меня есть приложение для Android, которое показывает пользовательский список с 5 столбцами TextView. Когда пользователь нажимает строку, я меняю макет, чтобы иметь 3 TextView и 2 EditTexts. У меня разные файлы макета для них обоих. Первоначально все работало нормально, макет строки изменяется должным образом, и я могу нажать на значения EditText и вход. Тем не менее, я хочу, чтобы любой из 2 EditText автоматически получил фокус на основе того, что нажимается. У меня уже есть рабочий код для этого. Моя проблема заключается в том, что программатическое запрос requestFocus () , кажется, блокирует часть, где я меняю макет строки с новым представлением.

Код: Выделить всё

private void changeLayout(final View view){

//get views from old row layout
TextView textViewQuantity = (TextView)view.findViewById(R.id.qtyInput);
TextView textViewDiscountReq = (TextView)view.findViewById(R.id.discInput);
TextView textViewName = (TextView)view.findViewById(R.id.dialogItemName);
TextView textViewPrice = (TextView)view.findViewById(R.id.price);
TextView textViewDiscount = (TextView)view.findViewById(R.id.discount);

//store values in strings
String itemName = textViewName.getText().toString();
String itemPrice = textViewPrice.getText().toString();
String itemDiscount = textViewDiscount.getText().toString();
String itemQty = textViewQuantity.getText().toString();
String itemDisc = textViewDiscountReq.getText().toString();

//set the view to gone
textViewQuantity.setVisibility(View.GONE);
textViewDiscountReq.setVisibility(View.GONE);
textViewName.setVisibility(View.GONE);
textViewPrice.setVisibility(View.GONE);
textViewDiscount.setVisibility(View.GONE);

//get the old layout
LinearLayout ll_inflate = (LinearLayout)view.findViewById(R.id.search_result_layout);

//get the inflate/new view
View child = getLayoutInflater().inflate(R.layout.search_result_inflate, null);

//get the views in the new view, populate them
TextView newName = (TextView)child.findViewById(R.id.dialogItemName);
newName.setText(itemName);

TextView newDiscount = (TextView)child.findViewById(R.id.discount);
newDiscount.setText(itemDiscount);

TextView newPrice = (TextView)child.findViewById(R.id.price);
newPrice.setText(itemPrice);

qtyIn = (EditText)child.findViewById(R.id.qtyInputSearchResult);
qtyIn.setText(itemQty);
qtyIn.setFilters(new InputFilter[] {filter});

discIn = (EditText)child.findViewById(R.id.discInputSearchResult);
discIn.setText(itemDisc);

//show new layout
ll_inflate.removeAllViews();
ll_inflate.removeAllViewsInLayout();
ll_inflate.addView(child);

//request focus here
if(focusTarget == 1){
Log.d("hello", "focus target is 1 " );
qtyIn.setFocusable(true);
qtyIn.setFocusableInTouchMode(true);
qtyIn.requestFocus();
}
else if(focusTarget == 2){
Log.d("hello", "focus target is 2 " );
discIn.requestFocus();
}

Log.d("hello", "focus state qtyIn = " + qtyIn.isFocused());
Log.d("hello", "focus state discIn = " + discIn.isFocused());
}
< /code>
Интересная часть состоит в том, что в журнале показаны правильные значения, в нем говорится правильный статус фокуса в соответствии с тем, что я хочу. Тем не менее, строка ll_inflate.addview (ребенок); 
вообще не работает!
Что здесь могло произойти? Я не понимаю, почему макет не изменился, но строки после . Еще одна странная вещь - как requestFocus (); предотвращает изменение представления.

Подробнее здесь: https://stackoverflow.com/questions/273 ... w-row-fail
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»