1

我的 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>
4

6 回答 6

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

调用findViewById您的 Activity 类,而不是您刚刚膨胀的 RelativeLayout(恕我直言)

于 2012-09-17T10:06:00.253 回答
1

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

于 2012-09-17T10:53:56.163 回答
1

回到原来的帖子。

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

...然后通过将其膨胀到另一个对象布局中来创建同一资源的另一个实例。

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

这个怎么样?

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

于 2012-09-17T11:23:25.493 回答
1

好吧,虽然成功,但这种换行看起来很神奇。可能只是实现特定的巧合 - 容易回归。它可能取决于 inflater 内部结构、布局对象缓存的位置等。您仍然会膨胀到可能与内容视图不同的对象实例中。如果它在当前实现中恰好是相同的,是否可以保证它总是相同的?

OTOH,对话框.findViewById 似乎更健壮:您只需在对话框中获得对组件的引用 - 就像您对 Activity 所做的那样。

我错过了什么吗?

于 2012-09-17T13:21:41.163 回答
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 文件名

于 2012-09-17T10:16:54.730 回答
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() 方法中有另一个布局,因此它无法识别另一个布局,因此您应该首先通过充气器加载布局并将其放入对话框的 setContentView 方法以使其工作。希望它可以帮助某人。并感谢您的支持。

于 2012-09-17T11:22:15.610 回答