【问题标题】:Android Eclipse editText not displaying after setText on local instanceAndroid Eclipse editText 在本地实例上的 setText 后不显示
【发布时间】: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_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 的线性布局中。

最后,这里是膨胀布局的代码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 只是不会实际出现。

【问题讨论】:

    标签: android android-edittext settext


    【解决方案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
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多