setText()不起作用

时间:2012-09-17 09:51:44

标签: android android-layout

我的xml中有一个EditText。它不会引发任何异常,但不会显示我在"kailash"中设置的文本EditText。它显示为空EditText。在调试中我表明编译器正在执行tx1.setText("kailash");但是不知道这不起作用。我有一个简单的MainActivity,因为有一个搜索按钮和onclick按钮search我试图显示一个对话框。请帮帮我。这是我的代码: -

Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.search_dialog);
RelativeLayout layout = (RelativeLayout) MainActivity.this.getLayoutInflater()
                                      .inflate(R.layout.search_dialog, null);
EditText txt1 = (EditText) layout.findViewById(R.id.txt1);
txt1.setText("kailash");
dialog.show();

这是我的xml代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"  >

 <EditText
        android:id="@+id/txt1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@android:drawable/editbox_background"
    android:textSize="16dp" />
</RelativeLayout>

6 个答案:

答案 0 :(得分:1)

final EditText txt1 = (EditText) findViewById(R.id.txt1);
txt1.setText("kailash");

在你的活动类上调用findViewById,而不是你刚刚膨胀的RelativeLayout(无论如何恕我直言)

答案 1 :(得分:1)

你无法改变final - 这是一个常数。在没有最终修饰符的情况下定义它,设置文本,然后将其他实例定义为最终

答案 2 :(得分:1)

回到原帖。

Kailash,看起来代码首先从XML布局设置对话框的内容视图: dialog.setContentView(R.layout.search_dialog);

...然后通过将其扩展到另一个对象layout中来创建相同资源的另一个实例。

然后修改后者中的文本视图,但Android显示前一个视图。

这个怎么样?

EditText txt1 =(EditText)对话框 .findViewById(R.id.txt1);

答案 3 :(得分:1)

嗯,虽然成功,但这次换线看起来很神奇。可能只是一个特定的实现巧合 - 易于回归。它可能取决于inflater内部,布局对象被缓存等等。您仍然会膨胀到可能与内容视图不同的对象实例。如果它在当前实现中恰好相同,是否有任何保证它始终是相同的?

OTOH,对话框 .findViewById似乎更强大:您只需在对话框中获得对组件的引用 - 就像使用Activity一样。

我错过了什么吗?

答案 4 :(得分:0)

像这样设置文字

View vv;        
    LayoutInflater  inflater  =  (LayoutInflater) YourClassName.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);     
    vv = inflater.inflate(R.layout.rowrelative, null);      
    EditText  edt =(EditText) vv.findViewById(R.id.editText1);
    edt.setText("Ankit");       
    this.addContentView(vv, new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));

在这里,您需要更改您的班级名称和Rowxml文件名

答案 5 :(得分:0)

实际上解决方案非常简单,我正在使用此代码:

dialog.setContentView(R.layout.search_dialog);
RelativeLayout layout = (RelativeLayout) MainActivity.this.getLayoutInflater()
                                  .inflate(R.layout.search_dialog, null);

代替此代码:

 RelativeLayout layout = (RelativeLayout) MainActivity.this.getLayoutInflater()
                                  .inflate(R.layout.search_dialog, null);
 dialog.setContentView(R.layout.search_dialog);

因为活动在其setcontentView()方法中有另一个布局,所以它不能识别另一个布局,因此你应首先通过inflater加载布局并将其放在对话框的setContentView方法中以使其工作。希望它能帮到某个人。并感谢你的支持。