Android Eclipse editText 在本地实例上的 setText 后不显示

Posted

技术标签:

【中文标题】Android Eclipse editText 在本地实例上的 setText 后不显示【英文标题】:Android Eclipse editText not displaying after setText on local instance 【发布时间】:2011-11-08 15:03:48 【问题描述】:

我通过“instanceOf”调用了一些 EditText,因为我不一定知道它们的确切名称/ID。当我这样做以获取文本时,它工作得很好。但是当我尝试基于本地 instanceOf EditText 设置文本()时,它不会显示我正在传递的字符串。奇怪的是,当我 setText 然后记录 getText 时,它会正确记录它——它只是不会物理显示它。

我还测试了将可见性设置为 View.INVISIBLE 或 View.GONE 只是为了看看我是否可以与之交互,但它什么也没做。

这里是设置文本然后记录它的代码 sn-p:

    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("USER TEXT", "Text is: " + 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_
        android:layout_ 
        android:background="#fff"
        xmlns:android1="http://schemas.android.com/apk/res/android">


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

       <LinearLayout android:id="@+id/item_edit_linear" 
        android:layout_
        android:background="@drawable/backrepeat"
        android:layout_
        >
            <TextView android:layout_ android:layout_ 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_ android1:layout_ 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_ android1:layout_ android1:paddingTop="5dip" android1:text="Item Name:" android1:textColor="@color/gray" android1:paddingBottom="5dip"></TextView>
           <EditText android1:layout_ android1:layout_ android1:id="@+id/edit_item_title">
               <requestFocus></requestFocus>
           </EditText>
           <TextView android1:layout_ android1:layout_ android1:paddingTop="5dip" android1:id="@+id/textView9" android1:text="Select Category:" android1:textColor="@color/gray" android1:paddingBottom="5dip"></TextView>
           <Spinner android1:layout_ android1:layout_ 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_ android1:layout_ android1:orientation="vertical" android1:id="@+id/item_spinner_layout" android1:visibility="gone">
               <TextView android1:layout_ android1:layout_ android1:paddingTop="5dip" android1:id="@+id/textView10" android1:text="Select Item" android1:textColor="@color/gray" android1:paddingBottom="5dip"></TextView>
               <Spinner android1:layout_ android1:layout_ android1:prompt="@string/edit_item_item_spinner_text" android1:paddingBottom="10dip" android1:id="@+id/edit_item_spinner"></Spinner>
           </LinearLayout>
       </LinearLayout>
       <LinearLayout android1:layout_ android1:layout_ android1:orientation="vertical" android1:id="@+id/editItemFields">

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

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

        </LinearLayout>

    </ScrollView>

    </LinearLayout>

通过代码,我使用以下内容填充了 editItemFields 布局:

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

我基本上会深入到布局中,直到我处于包含我的 editTexts 的线性布局中。

最后,这里是膨胀布局的代码sn-ps:

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

更新: 只是为了测试,我添加了这一行,看看我是否可以通过 id 硬引用它:

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

它仍然不会出现。我膨胀包含这些项目的布局这一事实与它有什么关系吗?基本上,选择旋转器项目时,布局膨胀,我尝试在该布局中设置项目的文本,但无济于用。顺便说一句,我仍然可以在设置 EditText 之后追踪它的值,但是这个 bugger 只是不会实际出现。

【问题讨论】:

【参考方案1】:

仅供参考,我想通了。不管出于什么原因,应用程序需要一点时间来处理所有获取信息并设置它们的函数,所以我添加了一个 post 处理程序:

handler.postDelayed(new Runnable() 公共无效运行() 填充字段(项目); , 500);

这 1/2 秒的等待使信息能够正确显示。谢谢大家的回答

【讨论】:

行得通!一些解释会很好,我不知道为什么会这样:)【参考方案2】:

在检索ViewsfindViewById() 时似乎存在非常细微但重要的区别。

如果您以“本地方式”调用findViewById(R.id.yourEditText),例如在 onResume() 方法的***行中,EditText 似乎表现正确,setText(...) 在显示中显示新值。

但是如果你把 Activity 放到另一个 Object 的成员变量中(例如一些 POJO),你这样做:

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

您仍然会找到一个无法区分的 EditText-Object,但 setText() 不再起作用。我不知道为什么。

我花了很多时间才找到这个(API 7 级项目)。呵呵!!!


(哎呀——算了。我没有 POJO,但是一些错误的 Map-caching 给了我一个旧的 Activity-Object)

【讨论】:

【参考方案3】:

听起来很像你没有得到你认为的EditText。如果您提供更多详细信息,也许我们可以帮助您找到合适的。

更新:

看来您确实知道ID,问题是它们不是唯一的。解决方案是从视图层次结构中的已知点开始,您知道它们是唯一的。例如,在扩展 editItemFields 布局后,您会在 view 变量中引用该视图层次结构的根。然后,您可以执行以下操作:

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

您将获得该特定项目的flight_numberEditText

【讨论】:

我考虑过,但问题是我有一个带有一堆 EditText 的布局,并且没有一个显示任何应该显示的文本。它显然至少找到了一些编辑文本,因为我没有得到空指针异常。布局是通过布局充气器添加的。这会改变什么吗? 编辑您的帖子以包含布局文件和您实例化/膨胀 mLayout3 的代码,我会看看。 啊,但问题是我有多个可以膨胀的视图。我刚刚发布了其中一个观点。我或多或少试图动态设置膨胀布局的edittexts的文本,所以我不能使用findViewById 对,但这也是我要说的。 :) 如果您可以找到每个根视图,您可以从该根视图开始并在该根视图上调用findViewById,它将在该视图的层次结构下而不是顶层搜索。 如果我要这样做,我将不得不为所有 109 个 editTexts 设置一个单独的 findViewById,不是吗?我希望以一种动态的方式(如上)完成此操作,我不搜索特定的 id【参考方案4】:

尝试做:

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

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

这比当前标记为已接受的解决方案要好得多。 这将在实际准备好时将其发布到 UI,而不是等待大约 1/2 秒。

【讨论】:

【参考方案5】:

当您应该能够使用它时,在创建 EditText 时设置它的 ID。

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

相反,你总是可以尝试

e.getEditableText();

【讨论】:

感谢您的建议,但这似乎没有任何帮助。我在“EditText e = (EditText) v”之后添加了 e.setId(15),但没有结果。我还应该提到我对按钮文本执行相同的 instanceOf 方法,它也不会显示我的 setText 【参考方案6】:

试试

((EditText) v).setText("HELLO");

【讨论】:

感谢您的建议。这似乎也不能解决问题。让我感到困惑的是,在我班级的不同部分,我正在做完全相同的事情,除了我使用 getText() 并且它正在获取正确的文本。 我不确定 getChildAt() 是返回对视图的引用还是它的副本。因此,如果它返回副本,您将能够 getText(),但设置它不会有任何效果,因为它不是您的 mLayout3 中的视图,而是它的副本 - 这就是您获得正确日志的原因 这是有道理的。有没有办法在不硬编码确切的 findViewById id 的情况下设置原始文本而不是副本? 我错了,它似乎正在返回参考,因为 LinearLayout mainLL = (LinearLayout)findViewById(R.id.main_LL); View testV = (View)mainLL.getChildAt(0); ((TextView)testV).setText("test"); Log.v("out: ", ((TextView)mainLL.getChildAt(0)).getText().toString()); 的工作原理与预期相同。你应该听从 kabuko 的建议,确保你得到了你真正需要的 EditText 我得到了我需要的所有编辑文本。我得到每一个并使用每一个。问题是我能得到它们的唯一方法是遍历所有布局子项,直到我找到一个editText,我似乎无法正确地将它引用到 setText

以上是关于Android Eclipse editText 在本地实例上的 setText 后不显示的主要内容,如果未能解决你的问题,请参考以下文章

Android EditText搜索用输入框特殊样式的制作

无法在 Mac 模拟器上输入 editText

EditText输入为空button不可点击搜索

Android常见控件— — —EditText

Android 键盘隐藏 EditText

Android从零单排系列七《Android视图控件——EditText》