1

我制作了一个带有两个活动的简单android程序,第一个活动包含一个edittext和一个按钮,第二个活动包含一个textview。现在当第一个活动中的按钮按下Edittext中的文本时,应该转到第二个活动的textView。我有尝试了如下代码,但它不起作用:

MainActivity.java

package com.example.myweb;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
     public final static String EXTRA_MESSAGE = "com.example.myweb";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Button b =(Button)findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                 EditText ed = (EditText)findViewById(R.id.edit_msg);
                Intent i = new Intent(getApplicationContext(),Act2.class);
            String s= ed.getText().toString();

            i.putExtra("EXTRA_MESSAGE", s);
                startActivity(i);

            }
        });

    }

}

Act2.java

package com.example.myweb;

import org.w3c.dom.Text;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class Act2 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act2);
        Button b1=(Button)findViewById(R.id.button1);
        b1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
            TextView tv = (TextView)findViewById(R.id.tv1); 
                Intent i =getIntent();
                String msg = i.getStringExtra(MainActivity.EXTRA_MESSAGE);
            tv.setText(msg);

            setContentView(tv);





            }
        });
    }
}

请帮助我。谢谢

4

9 回答 9

3

试试这个:

在 MainActivity.java 中:

将 Button b 和 EditText 声明为类字段(即,将其保留在 onCreate() 之外)

class MainActivity.java
{
Button b;
EditText ed;
...

onCreate() {
...
        b =(Button)findViewById(R.id.button1);
ed = (EditText)findViewById(R.id.edit_msg);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub


                Intent i = new Intent(MainActivity.this,Act2.class);
            String s= ed.getText().toString();

            i.putExtra("EXTRA_MESSAGE", s);
                startActivity(i);

            }
        });
...

在 Act2.java 中:

    ...
    Intent i = getIntent();
    String msg = i.getStringExtra("EXTRA_MESSAGE");


    TextView tv = (TextView)findViewById(R.id.tv1); 
tv.setText(msg);
     Button b1=(Button)findViewById(R.id.button1);
            b1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub



                }
            });
    ...
于 2013-04-30T06:34:18.830 回答
3

您正在使用

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

所以,在 MainActivity

i.putExtra(EXTRA_MESSAGE, s);
startActivity(i);

(或者)

String message = intent.getStringExtra("EXTRA_MESSAGE");

还,

i.putExtra("EXTRA_MESSAGE", s);
于 2013-04-30T06:26:21.080 回答
3

改变

String msg = i.getStringExtra(MainActivity.EXTRA_MESSAGE);

String msg = i.getStringExtra("EXTRA_MESSAGE");

MainActivity.EXTRA_MESSAGE将意味着MainActivity.java类的静态变量。希望你能有所作为。EXTRA_MESSAGE您需要输入的变量intent i

编辑:对于您的崩溃,我们需要一个 logcat o/p 和活动,清单代码。但可能的原因:

  1. 活动Act2.java未在manifest文件中声明。

  2. 你说你在第二个活动中只有一个文本视图。但你正试图button1act2.xml. 所以你正在接近 Force。

更改为Act2.java_onCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act2);

    TextView tv = (TextView)findViewById(R.id.tv1); 
    Intent i =getIntent();
    String msg = i.getStringExtra("EXTRA_MESSAGE");
    tv.setText(msg);
}

您不需要调用setContentView(tv);,因为它已经存在于 act2.xml 中并且您正在使用setContentView(R.layout.act2);

希望你的问题得到解决。

于 2013-04-30T06:27:50.693 回答
1
    Use this code 

    **MainActivity.java**

        public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button)findViewById(R.id.button1);
        final EditText editText = (EditText)findViewById(R.id.editText1);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
                 intent.putExtra("EXTRA_MESSAGE", editText.getText().toString());
                startActivity(intent);

            }
        });


    }

}

**activity_main.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=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="74dp"
        android:layout_marginTop="26dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editText1"
        android:layout_marginLeft="69dp"
        android:layout_marginTop="47dp"
        android:text="Button" />

</RelativeLayout>

**SecondActivity.java**

public class SecondActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // TODO Auto-generated method stub

        setContentView(R.layout.second);

        Intent intent = getIntent();
        final String message = intent.getStringExtra("EXTRA_MESSAGE");

     Button button = (Button)findViewById(R.id.button1);

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                TextView textView = new TextView(SecondActivity.this);
                textView.setText(message);

                setContentView(textView);

            }
        });
    }

}


**second.xml** 

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

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />



</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tester"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.tester.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity"></activity>
    </application>

</manifest>
于 2013-04-30T06:47:14.310 回答
0

尝试

Intent i = new Intent(MainActivity.this,Act2.class);
于 2013-04-30T06:22:22.093 回答
0

您还记得在清单 XML 中正确定义您的第二个活动吗?

查看这个很棒的指南,了解您可能错过的任何其他内容:http: //developer.android.com/training/basics/firstapp/starting-activity.html

于 2013-04-30T06:23:42.457 回答
0

您正在使用

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

所以,在 MainActivity

i.putExtra(EXTRA_MESSAGE, s);
startActivity(i);
于 2013-04-30T06:26:06.877 回答
0

MainActivity.java 中的 EXTRA_MESSAGE 变量的值与您将消息放入意图的键值不同。

MainActivity.java:

public final static String EXTRA_MESSAGE = "com.example.myweb";

i.put("EXTRA_MESSAGE",s);

Act2.java:(您正在通过不正确的 extra_message 变量访问)

Intent i = getIntent();
String text = i.getStringExtra(MainActivity.EXTRA_MESSAGE); //WHICH IS DIFFER FROM THE KEY VALUE

所以在设置和获取值的时候key值应该是一样的。在这里,设置值键是“EXTRA_MESSAGE”,同时获取“com.example.myweb”,所以你会得到空指针异常。

解决方案:

只需更改 Act2.java 中的行

Intent i = getIntent();
String text = i.getStringExtra("EXTRA_MESSAGE");

还要检查您的清单文件以获取活动声明。

希望它可以帮助你。

于 2013-04-30T06:51:07.213 回答
0

请检查并更改您的代码它的工作原理

  package com.example.activityact;

  import android.app.Activity;
  import android.content.Intent;
  import android.os.Bundle;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.Button;
  import android.widget.EditText;

  public class MainActivity extends Activity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);


   Button b =(Button)findViewById(R.id.button1);
   b.setOnClickListener(new OnClickListener() {

       @Override
       public void onClick(View v) {
           // TODO Auto-generated method stub

            EditText ed = (EditText)findViewById(R.id.editText1);
           Intent i = new Intent(getApplicationContext(),Act2.class);
       String s= ed.getText().toString();

       i.putExtra("EXTRA_MESSAGE", s);
           startActivity(i);

       }
   });

  }

 }

Act2.java

package com.example.activityact;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class Act2 extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act2);
    // TODO Auto-generated method stub
    TextView tv = (TextView) findViewById(R.id.textView1);
    Intent i =getIntent();
    // String msg = i.getStringExtra(EXTRA_MESSAGE);
    //String receiver = getIntent().getStringExtra(EXTRA_MESSAGE);
    String message = i.getStringExtra("EXTRA_MESSAGE");
    tv.setText(message);

}

 }
于 2013-04-30T06:54:06.960 回答