【问题标题】:Set Button text with EditText使用 EditText 设置按钮文本
【发布时间】:2014-05-04 11:48:10
【问题描述】:

哦,这里是更新版本: 主要xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.names.MainActivity$PlaceholderFragment" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="23dp"
        android:onClick="nextScreen"
        android:text="@string/Next" />

    <EditText
        android:id="@+id/editText2"
        android:hint="Player B"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText1"
        android:layout_marginTop="31dp"
        android:ems="10" />

    <EditText
        android:id="@+id/editText1"
        android:hint="Player A"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText2"
        android:layout_below="@+id/button1"
        android:layout_marginTop="46dp"
        android:ems="10" />

</RelativeLayout>

下一个按钮调用main中的nextScreen方法:

public void nextScreen (View view)
{
    EditText ed1 = (EditText)findViewById(R.id.editText1);
    EditText ed2 = (EditText)findViewById(R.id.editText2);

    Intent intent = new Intent (this, ButtonsActivity.class);
    intent.putExtra("string_A", ed1.getText());
    intent.putExtra("string_B", ed2.getText());
    startActivity(intent);
}

以及第二个活动中的 onCreate:

protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_buttons);

    Button btn1 = (Button)findViewById(R.id.player_A);
    Button btn2 = (Button)findViewById(R.id.player_B);

    btn1.setText((CharSequence) getIntent().getExtras().get("string_A"));
    btn2.setText((CharSequence) getIntent().getExtras().get("string_B"));

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }
}

当我在 EditTexts 中输入一些文本时,我按下下一个按钮,应用程序崩溃。 Logcat-

05-04 15:21:54.922: E/AndroidRuntime(2025): FATAL EXCEPTION: main
05-04 15:21:54.922: E/AndroidRuntime(2025): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.names/com.example.names.ButtonsActivity}: java.lang.NullPointerException
05-04 15:21:54.922: E/AndroidRuntime(2025):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at android.app.ActivityThread.access$700(ActivityThread.java:134)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at android.os.Looper.loop(Looper.java:137)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at android.app.ActivityThread.main(ActivityThread.java:4867)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at java.lang.reflect.Method.invokeNative(Native Method)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at java.lang.reflect.Method.invoke(Method.java:511)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at dalvik.system.NativeStart.main(Native Method)
05-04 15:21:54.922: E/AndroidRuntime(2025): Caused by: java.lang.NullPointerException
05-04 15:21:54.922: E/AndroidRuntime(2025):     at com.example.names.ButtonsActivity.onCreate(ButtonsActivity.java:24)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at android.app.Activity.performCreate(Activity.java:5047)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
05-04 15:21:54.922: E/AndroidRuntime(2025):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
05-04 15:21:54.922: E/AndroidRuntime(2025):     ... 11 more

【问题讨论】:

    标签: android android-edittext android-button


    【解决方案1】:

    这样做

    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("string_A", ed1.getText().toString()); //see .toString();
    intent.putExtra("string_B", ed2.getText().toString());
    

    然后变成这样。

    getIntent().getStringExtra("string_A");
    

    【讨论】:

    • 我似乎得到了很好的字符串,因为当我去 System.out.println(string_A) 时,它会显示我在 EditText 中输入的任何内容。但是一旦我尝试 btn.setText(string_A) 它就会给出 NullPointerException
    【解决方案2】:

    您无法从未设置为上下文视图的布局文件中按 id 获取视图。在调用第二个活动时,您应该将要在按钮上显示的字符串设置为 Intent 的额外内容

    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("Str1", ed1.getText().toString());
    intent.putExtra("Str2", ed2.getText().toString());
    startActivity(intent);
    

    在你的第二个活动中:

    btn1.setText(getIntent().getExtras().get("Str1"));
    btn2.setTextgetIntent().getExtras().get("Str2"));
    

    这是在活动之间共享数据的最佳方式。

    【讨论】:

    • 哦,我已经更新了我的代码,但它仍然无法正常工作?
    • 在第 2 个活动的第 24 行崩溃,即 btn1.setText((CharSequence) getIntent().getExtras().get("string_A"));
    • 无需转换为 CharSequence。您可以将字符串设置为按钮
    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多