Android Eclipse editText не отображается после setText на локальном экземпляре - PullRequest
2 голосов
/ 01 сентября 2011

Я вызываю несколько EditTexts через "instanceOf", потому что я не обязательно знаю их точные имена / идентификаторы. Когда я делаю это, чтобы получить текст, он работает просто отлично. Но когда я пытаюсь установить setText () на основе локального instanceOf EditText, он не будет отображать строку, которую я передаю. Как ни странно, когда я устанавливаю Text, а затем записываю getText, он записывает его правильно - он просто не отображает его физически.

Я также проверил настройку видимости View.INVISIBLE или View.GONE, чтобы посмотреть, смогу ли я вообще с ней взаимодействовать, и она ничего не делает.

Вот фрагмент кода, который устанавливает текст и затем записывает его:

    LinearLayout mLayout = (LinearLayout) main_fields_holder.getChildAt(0);
         LinearLayout mLayout2 = (LinearLayout) mLayout.getChildAt(0);
         LinearLayout mLayout3 = (LinearLayout) mLayout2.getChildAt(1);
for(int i = 0; i < mLayout3.getChildCount(); i++){
                    View v = (View) mLayout3.getChildAt(i);
                    if (v instanceof EditText){
                        EditText e = (EditText) v;
                        e.setText("HELLO");

                        Log.v("USER TEXT", "Text is: " + e.getText().toString() + "!");

                        ;

                    }
} 

Я должен также упомянуть, что я делаю тот же метод instanceOf с текстом кнопки, и он не отображает мой setText.

Есть ли какая-то причина, по которой локальный экземпляр editText (или кнопки) не может быть обработан?

Кстати, строка Log.v («ТЕКСТ ПОЛЬЗОВАТЕЛЯ», «Текст это:» + e.getText (). ToString () + «!»); ДАЕТ мне "ПРИВЕТ!" Я даже не уверен, что это значит для моей проблемы.

Основной файл макета:

<?xml version="1.0" encoding="utf-8"?>
   <LinearLayout    
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:background="#fff"
        xmlns:android1="http://schemas.android.com/apk/res/android">


    <ScrollView android:id="@+id/scrollView1" android:layout_width="fill_parent" android:layout_height="fill_parent">
      <LinearLayout 
        android:orientation="vertical" 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" android1:focusable="false">

       <LinearLayout android:id="@+id/item_edit_linear" 
        android:layout_height="wrap_content"
        android:background="@drawable/backrepeat"
        android:layout_width="fill_parent"
        >
            <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/add_item_text" android:text="Add New Item" android:textStyle="bold" android:paddingLeft="15dip" android1:paddingTop="8dip" android1:textSize="12pt" android1:textColor="@color/blue"></TextView>
        </LinearLayout>
       <LinearLayout android1:layout_height="wrap_content" android1:layout_width="fill_parent" android1:orientation="vertical" android1:paddingLeft="15dip" android1:background="@drawable/borderlines" android1:paddingBottom="15dip" android1:paddingTop="10dip" android1:id="@+id/spinner_holder_layout">
           <TextView android1:layout_height="wrap_content" android1:layout_width="wrap_content" android1:paddingTop="5dip" android1:text="Item Name:" android1:textColor="@color/gray" android1:paddingBottom="5dip"></TextView>
           <EditText android1:layout_height="wrap_content" android1:layout_width="290dip" android1:id="@+id/edit_item_title">
               <requestFocus></requestFocus>
           </EditText>
           <TextView android1:layout_height="wrap_content" android1:layout_width="wrap_content" android1:paddingTop="5dip" android1:id="@+id/textView9" android1:text="Select Category:" android1:textColor="@color/gray" android1:paddingBottom="5dip"></TextView>
           <Spinner android1:layout_height="wrap_content" android1:layout_width="wrap_content" android1:prompt="@string/edit_item_category_spinner_text" android1:id="@+id/edit_item_category_spinner" android1:entries="@array/categoryList" android1:paddingBottom="10dip"></Spinner>
           <LinearLayout android1:layout_height="wrap_content" android1:layout_width="fill_parent" android1:orientation="vertical" android1:id="@+id/item_spinner_layout" android1:visibility="gone">
               <TextView android1:layout_height="wrap_content" android1:layout_width="wrap_content" android1:paddingTop="5dip" android1:id="@+id/textView10" android1:text="Select Item" android1:textColor="@color/gray" android1:paddingBottom="5dip"></TextView>
               <Spinner android1:layout_height="wrap_content" android1:layout_width="wrap_content" android1:prompt="@string/edit_item_item_spinner_text" android1:paddingBottom="10dip" android1:id="@+id/edit_item_spinner"></Spinner>
           </LinearLayout>
       </LinearLayout>
       <LinearLayout android1:layout_height="wrap_content" android1:layout_width="fill_parent" android1:orientation="vertical" android1:id="@+id/editItemFields">

       </LinearLayout>
       <LinearLayout android1:layout_marginLeft="15dip" android1:layout_width="fill_parent" android1:layout_height="wrap_content" android1:id="@+id/date_time_container" android1:visibility="gone">
           <LinearLayout android1:layout_width="wrap_content" android1:layout_height="fill_parent" android1:id="@+id/linearLayout7" android1:orientation="vertical">
               <TextView android1:layout_width="fill_parent" android1:id="@+id/dep_date_text" android1:textColor="@color/gray" android1:layout_marginBottom="10dip" android1:text="Departure Date:" android1:gravity="right|center" android1:layout_height="36dip"></TextView>
               <TextView android1:layout_width="fill_parent" android1:id="@+id/dep_time_text" android1:textColor="@color/gray" android1:layout_marginBottom="9dip" android1:text="Depature Time:" android1:gravity="right|center" android1:layout_height="36dip"></TextView>
               <TextView android1:layout_width="fill_parent" android1:id="@+id/arr_date_text" android1:textColor="@color/gray" android1:layout_marginBottom="9dip" android1:text="Arrival Date:" android1:gravity="right|center" android1:layout_height="36dip"></TextView>
               <TextView android1:layout_width="fill_parent" android1:id="@+id/arr_time_text" android1:textColor="@color/gray" android1:layout_marginBottom="9dip" android1:text="Arrival Time:" android1:gravity="right|center" android1:layout_height="36dip"></TextView>
           </LinearLayout>
           <LinearLayout android1:layout_marginLeft="5dip" android1:layout_width="wrap_content" android1:layout_height="fill_parent" android1:id="@+id/linearLayout8" android1:orientation="vertical">
               <Button android1:layout_width="wrap_content" android1:layout_height="45dip" android1:id="@+id/departure_date" android1:minWidth="125dip" android1:text="Button"></Button>
               <Button android1:layout_width="wrap_content" android1:layout_height="45dip" android1:id="@+id/departure_time" android1:minWidth="125dip" android1:text="Button"></Button>
               <Button android1:layout_width="wrap_content" android1:layout_height="45dip" android1:id="@+id/arrival_date" android1:minWidth="125dip" android1:text="Button"></Button>
               <Button android1:layout_width="wrap_content" android1:layout_height="45dip" android1:id="@+id/arrival_time" android1:minWidth="125dip" android1:text="Button"></Button>
           </LinearLayout>
       </LinearLayout>

        <LinearLayout android:layout_width="fill_parent" android:id="@+id/editItemLinearLayout" 
        android:layout_height="fill_parent" android:orientation="vertical" android1:paddingLeft="15dip" android1:visibility="gone">
        <TextView android:text="Cost" android:id="@+id/textView1" 
            android:layout_width="wrap_content" android:layout_height="wrap_content">
        </TextView>
        <EditText android:layout_height="wrap_content" 
            android:layout_width="fill_parent" android:id="@+id/edit_item_cost">
        </EditText>
        <TextView android:text="Contact Phone" android:id="@+id/textView2" 
            android:layout_width="wrap_content" android:layout_height="wrap_content">
        </TextView>
        <EditText android:layout_height="wrap_content" 
            android:layout_width="fill_parent" android:id="@+id/edit_item_phone">
        </EditText>
        <TextView android:text="Carrier" android:id="@+id/textView3" 
            android:layout_width="wrap_content" android:layout_height="wrap_content">
        </TextView>
        <EditText android:layout_height="wrap_content" 
            android:layout_width="fill_parent" android:id="@+id/edit_item_carrier">
        </EditText>
        <TextView android:text="Names" android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        <EditText android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/edit_item_names">
        </EditText>
        <TextView android:text="Departure Location" android:id="@+id/textView5" 
            android:layout_width="wrap_content" android:layout_height="wrap_content">
        </TextView>
        <EditText  android:layout_height="wrap_content" 
            android:layout_width="fill_parent" android:id="@+id/edit_item_departure_location">
        </EditText>
        <TextView android:text="Arrival Location" android:id="@+id/textView6" 
            android:layout_width="wrap_content" android:layout_height="wrap_content">
        </TextView>
        <EditText android:layout_height="wrap_content" 
            android:layout_width="fill_parent" android:id="@+id/edit_item_arrival_location">
        </EditText>
        <TextView android:id="@+id/textView7" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Date"></TextView>
        <Button android:text="Button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/edit_item_reminder_date"></Button>
        <TextView android:id="@+id/textView8" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Time"></TextView>
        <Button android:text="Button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/edit_item_reminder_time"></Button>
        </LinearLayout>
        <RelativeLayout android1:layout_width="fill_parent" android1:layout_marginTop="50dip" 
        android1:id="@+id/relativeLayout1" android1:layout_height="fill_parent">
            <Button android1:id="@+id/edit_item_confirm" android1:layout_width="wrap_content" android1:layout_height="wrap_content" android1:background="@drawable/savebutton" android1:layout_alignParentBottom="true"></Button>
            <Button android1:width="159dip" android1:background="@drawable/cancelbutton" android1:layout_width="wrap_content" android1:id="@+id/item_creation_cancel" android1:layout_height="wrap_content" android1:layout_alignParentRight="true" android1:layout_alignParentBottom="true"></Button>
        </RelativeLayout>

        </LinearLayout>

    </ScrollView>

    </LinearLayout>

Через код я раздуваю макет editItemFields следующим образом:

<LinearLayout android1:paddingLeft="15dip" android1:layout_width="fill_parent" 
android1:background="@color/white" android1:id="@+id/flight_edit_container" 
android1:orientation="vertical" android1:layout_height="fill_parent" 
xmlns:android1="http://schemas.android.com/apk/res/android" android1:paddingTop="10dip">
    <LinearLayout android1:layout_height="wrap_content" android1:layout_width="fill_parent" android1:id="@+id/linearLayout6">
        <LinearLayout android1:layout_height="fill_parent" android1:layout_width="wrap_content" android1:id="@+id/linearLayout7" android1:orientation="vertical">
            <TextView android1:id="@+id/TextView02" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:gravity="right|center" android1:layout_height="36dip" android1:layout_marginBottom="10dip" android1:text="Airline:"></TextView>
            <TextView android1:text="Flight #:" android1:id="@+id/TextView05" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:gravity="right|center" android1:layout_height="36dip" android1:layout_marginBottom="10dip"></TextView>
            <TextView android1:text="Gate:" android1:id="@+id/TextView04" android1:textColor="@color/gray" android1:gravity="right|center" android1:layout_width="100dip" android1:layout_height="36dip" android1:layout_marginBottom="10dip"></TextView>
            <TextView android1:id="@+id/TextView09" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:gravity="right|center" android1:text="Departure Location:" android1:layout_height="36dip" android1:layout_marginBottom="10dip"></TextView>
            <TextView android1:text="Departure Airport:" android1:id="@+id/TextView14" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:gravity="right|center" android1:layout_height="36dip" android1:layout_marginBottom="10dip"></TextView>
            <TextView android1:text="Confirmation #:" android1:id="@+id/TextView12" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:gravity="right|center" android1:layout_height="36dip" android1:layout_marginBottom="9dip"></TextView>
            <TextView android1:gravity="right|center" android1:text="Destination:" android1:id="@+id/TextView08" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:layout_height="36dip" android1:layout_marginBottom="9dip"></TextView>
            <TextView android1:text="Arrival Airport:" android1:id="@+id/TextView15" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:gravity="right|center" android1:layout_height="36dip" android1:layout_marginBottom="9dip"></TextView>
            <TextView android1:text="Cost:" android1:id="@+id/TextView09" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:gravity="right|center" android1:layout_height="36dip" android1:layout_marginBottom="9dip"></TextView>
            <TextView android1:text="Class:" android1:id="@+id/TextView08" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:gravity="right|center" android1:layout_height="36dip" android1:layout_marginBottom="9dip"></TextView>
            <TextView android1:text="Seat:" android1:id="@+id/TextView11" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:gravity="right|center" android1:layout_height="36dip" android1:layout_marginBottom="9dip"></TextView>
            <TextView android1:text="Travelers:" android1:id="@+id/TextView12" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:gravity="right|center" android1:layout_height="36dip" android1:layout_marginBottom="9dip"></TextView>
            <TextView android1:text="Memo:" android1:id="@+id/TextView13" android1:textColor="@color/gray" android1:layout_width="fill_parent" android1:gravity="right|center" android1:layout_height="36dip" android1:layout_marginBottom="9dip"></TextView>
        </LinearLayout>
        <LinearLayout android1:layout_height="fill_parent" android1:layout_width="wrap_content" android1:id="@+id/linearLayout8" android1:orientation="vertical" android1:layout_marginLeft="5dip">
            <EditText android1:layout_width="190dip" android1:layout_height="45dip" android1:id="@+id/flight_airline"></EditText>
            <EditText android1:layout_width="190dip" android1:id="@+id/flight_number" android1:layout_height="45dip"></EditText>
            <EditText android1:layout_width="190dip" android1:id="@+id/flight_gate" android1:layout_height="45dip"></EditText>
            <EditText android1:layout_width="190dip" android1:id="@+id/flight_deplocation" android1:layout_height="45dip"></EditText>
            <EditText android1:layout_width="190dip" android1:id="@+id/flight_depairport" android1:layout_height="45dip"></EditText>
            <EditText android1:layout_width="190dip" android1:id="@+id/flight_confirmation" android1:layout_height="45dip"></EditText>
            <EditText android1:layout_height="45dip" android1:layout_width="190dip" android1:id="@+id/flight_destination"></EditText>
            <EditText android1:layout_height="45dip" android1:layout_width="190dip" android1:id="@+id/flight_arrairport">
            </EditText>
            <EditText android1:layout_width="190dip" android1:layout_height="45dip" android1:id="@+id/flight_cost"></EditText>
            <EditText android1:layout_width="190dip" android1:layout_height="45dip" android1:id="@+id/flight_class"></EditText>
            <EditText android1:layout_width="190dip" android1:layout_height="45dip" android1:id="@+id/flight_seat"></EditText>
            <Button android1:text="Button" android1:minWidth="125dip" android1:id="@+id/flight_travelers" android1:layout_width="wrap_content" android1:layout_height="45dip"></Button>
            <EditText android1:layout_width="190dip" android1:id="@+id/flight_memo" android1:layout_height="45dip"></EditText>
        </LinearLayout>
    </LinearLayout>
           </LinearLayout>

Я в основном углубляюсь в макеты, пока не нахожусь в линейном макете, который содержит мои editTexts.

Наконец, вот фрагменты кода, которые раздувают макет:

main_fields_holder = (LinearLayout) findViewById(R.id.editItemFields);
view = LayoutInflater.from(getBaseContext()).inflate(R.layout.flight_fields,
                        null);
                 main_fields_holder.addView(view);

UPDATE: Просто чтобы проверить, я добавил эту строку, чтобы увидеть, могу ли я жестко ссылаться на нее по id:

EditText a = ((EditText)findViewById(R.id.flight_airline));
            a.setText("HELLO");

И это ЕЩЕ не появится. Может ли факт, что я раздуваю макет, содержащий эти элементы, как-то с этим связан? В основном, когда выбран спиннер, макет раздувается, и я пытаюсь установить текст элементов в этом макете, но безрезультатно. Кстати, я все еще могу отследить значение EditText после его установки, но ошибка просто не будет отображаться физически.

Ответы [ 6 ]

3 голосов
/ 21 октября 2012

Кажется, есть очень тонкие, но важные различия при извлечении Views с findViewById().

Если вы звоните findViewById(R.id.yourEditText) "изначально", например в строке верхнего уровня метода onResume(), EditText, кажется, работает правильно, setText(...) показывает новое значение на дисплее.

Но если вы поместите Activity в переменную-член другого объекта (например, в некоторый POJO), и вы сделаете это:

editText = pojo.getActivity().findViewById(R.id.EditText);

вы все равно найдете право неразличимым EditText-Object, но setText() больше не работает. Я не знаю почему.

Я потратил много часов, чтобы найти это (API Level 7-Project). Huuuh !!!


(Ууууу - забудь об этом. У меня не было POJO, но было неправильное кэширование на карте, которое дало мне старый объект Activity)

3 голосов
/ 09 сентября 2011

К вашему сведению, я понял это.По какой-то причине, приложению понадобился момент, чтобы пройти через все функции, которые собирают информацию и установили их, поэтому я добавил обработчик записи:

handler.postDelayed (new Runnable () {publicvoid run () {populateFields (item);}}, 500);

Это ожидание 1/2 секунды позволило правильно отобразить информацию.Спасибо за все ответы

1 голос
/ 10 октября 2013

Попробуйте сделать:

final EditText a = ((EditText)findViewById(R.id.flight_airline));
a.post(new Runnable() {

     @Override
     public void run() {
         a.setText("HELLO");
     }
});

Это гораздо лучшее решение, чем то, которое в настоящее время помечено как принятое.Он будет публиковать его в пользовательском интерфейсе, когда он действительно будет готов, вместо этого он будет ждать 1/2 секунды.

1 голос
/ 01 сентября 2011

Звучит очень похоже на то, что вы не получаете EditText, как вы думаете. Если вы дадите более подробную информацию, возможно, мы поможем вам найти правильный.

Обновление:

Так что кажется, что вы действительно действительно знаете идентификаторы, проблема в том, что они не уникальны. Решение состоит в том, чтобы начать с известной точки в иерархии представлений, где вы знаете, что они уникальны. Например, после того, как вы раздули свой макет editItemFields, у вас есть ссылка на корень этой иерархии представлений в переменной view. Затем вы можете сделать что-то вроде:

EditText flightNumberEditText = (EditText) view.findViewById(R.id.flight_number);

И вы получите flight_number EditText за этот конкретный предмет.

0 голосов
/ 01 сентября 2011

попробуй

((EditText) v).setText("HELLO");
0 голосов
/ 01 сентября 2011

Установите идентификатор EditText при создании, когда вы сможете работать с ним.

e.setId(15); //15 is any positive integer

Наоборот вы всегда можете попробовать

e.getEditableText();

...