首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用EditText设置按钮文本

使用EditText设置按钮文本
EN

Stack Overflow用户
提问于 2014-05-04 19:48:10
回答 2查看 121关注 0票数 0

下面是更新后的版本: Main xml:

代码语言:javascript
复制
<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>

Next-按钮在main中调用方法nextScreen:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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中输入一些文本时,我按下next按钮,应用程序崩溃。Logcat-

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2014-05-04 20:29:08

您不能从未设置为上下文视图的布局文件中按id获取视图。在调用第二个活动时,您应该将想要在按钮上显示的字符串设置为Intent的附加字符串

代码语言:javascript
复制
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("Str1", ed1.getText().toString());
intent.putExtra("Str2", ed2.getText().toString());
startActivity(intent);

在你的第二个练习中:

代码语言:javascript
复制
btn1.setText(getIntent().getExtras().get("Str1"));
btn2.setTextgetIntent().getExtras().get("Str2"));

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

票数 0
EN

Stack Overflow用户

发布于 2014-05-04 21:37:08

像这样做

代码语言:javascript
复制
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("string_A", ed1.getText().toString()); //see .toString();
intent.putExtra("string_B", ed2.getText().toString());

得到这样的结果。

代码语言:javascript
复制
getIntent().getStringExtra("string_A");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23455864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档