如何使用i.putExtra将文本从screen1发送到screen2?

时间:2012-05-01 20:36:23

标签: android class button android-intent

我正在写一本食谱书,我遇到了一个问题 - 我想把食谱清单中的文字发送到食谱显示屏,我必须做错事,因为我一直强行关闭:

这是我的Recipe_Button_List的代码

public class Recipe_Button_List扩展了Activity {

EditText inputMethod;

EditText inputIngredients;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.recipe_button_list);

    inputMethod = (EditText) findViewById(R.id.textView2);
    inputIngredients = (EditText) findViewById(R.id.textView1);

    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);



    Button mainNext = (Button) findViewById(R.id.Recipe1);
    mainNext.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            final TextView mTextView = (TextView) findViewById(R.id.textView1);
            mTextView.setText(R.string.Test);
            Intent i= new Intent(getBaseContext(),recipedisplayscreen.class);
            //Sending data to the next screen
            i.putExtra("textView1", inputIngredients.getText().toString());
            i.putExtra("textView2", inputMethod.getText().toString());

            Log.e("n", inputMethod.getText()+"."+ inputIngredients.getText());

            startActivity(i);
        }
    });
}
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     MenuInflater inflater = getMenuInflater();
     inflater.inflate(R.menu.recipe_menu1, menu);
     return true;

}

}

这是我的recipe_display_screen:

public class recipedisplayscreen扩展了Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.recipedisplayscreen);

    TextView MethodDisplay = (TextView) findViewById(R.id.textView2);
    TextView IngredientsDisplay = (TextView) findViewById(R.id.textView4);

    Intent i = getIntent();
    String Ingredients = i.getStringExtra("TextView1");
    String Method = i.getStringExtra("TextView2");
    Log.e("recipedisplayscreen", Ingredients + "." + Method);

    MethodDisplay.setText(Method);
    IngredientsDisplay.setText(Ingredients);


    ActionBar actionBar = getActionBar();
    setTitle(R.string.title);
    actionBar.setDisplayHomeAsUpEnabled(true);}

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // App icon in action bar clicked; go home
                Intent intent = new Intent(this, MainScreen.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }




 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.recipe_menu1, menu);
        return true;

}

}

以下是来自logCat的记录:

05-01 21:54:54.638:D / AndroidRuntime(10717):关闭VM 05-01 21:54:54.638:W / dalvikvm(10717):threadid = 1:线程退出时未捕获异常(group = 0x40a301f8) 05-01 21:54:54.638:E / AndroidRuntime(10717):致命异常:主要 05-01 21:54:54.638:E / AndroidRuntime(10717):java.lang.RuntimeException:无法启动活动ComponentInfo {com.bluStudios.Recipes4U.ics / com.bluStudios.Recipes4U.ics.Recipe_Button_List}:java.lang .ClassCastException:android.widget.TextView无法强制转换为android.widget.EditText 05-01 21:54:54.638:E / AndroidRuntime(10717):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 05-01 21:54:54.638:E / AndroidRuntime(10717):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 05-01 21:54:54.638:E / AndroidRuntime(10717):在android.app.ActivityThread.access $ 600(ActivityThread.java:123) 05-01 21:54:54.638:E / AndroidRuntime(10717):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147) 05-01 21:54:54.638:E / AndroidRuntime(10717):在android.os.Handler.dispatchMessage(Handler.java:99) 05-01 21:54:54.638:E / AndroidRuntime(10717):在android.os.Looper.loop(Looper.java:137) 05-01 21:54:54.638:E / AndroidRuntime(10717):在android.app.ActivityThread.main(ActivityThread.java:4424) 05-01 21:54:54.638:E / AndroidRuntime(10717):at java.lang.reflect.Method.invokeNative(Native Method) 05-01 21:54:54.638:E / AndroidRuntime(10717):at java.lang.reflect.Method.invoke(Method.java:511) 05-01 21:54:54.638:E / AndroidRuntime(10717):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784) 05-01 21:54:54.638:E / AndroidRuntime(10717):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 05-01 21:54:54.638:E / AndroidRuntime(10717):at dalvik.system.NativeStart.main(Native Method) 05-01 21:54:54.638:E / AndroidRuntime(10717):引起:java.lang.ClassCastException:android.widget.TextView无法强制转换为android.widget.EditText 05-01 21:54:54.638:E / AndroidRuntime(10717):at com.bluStudios.Recipes4U.ics.Recipe_Button_List.onCreate(Recipe_Button_List.java:25) 05-01 21:54:54.638:E / AndroidRuntime(10717):在android.app.Activity.performCreate(Activity.java:4465) 05-01 21:54:54.638:E / AndroidRuntime(10717):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 05-01 21:54:54.638:E / AndroidRuntime(10717):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 05-01 21:54:54.638:E / AndroidRuntime(10717):... 11更多

当我按下将你带到recipe_button_list

的按钮时,会发生PS Force关闭

修改 你好,我们又见面了 :) 我还有另外一个小问题 - 我的recipe_display_screen接收到null.null从我之前的屏幕上看到了什么原因?

logcat的:

05-02 11:28:29.764:D / dalvikvm(28455):GC_CONCURRENT释放113K,2%免费14526K / 14727K,暂停2ms + 14ms 05-02 11:28:30.022:E / n(28455):FromStringMethod.if这显示然后Intent活动正常工作 05-02 11:28:30.163:D / dalvikvm(28455):GC_FOR_ALLOC释放1769K,13%免费12813K / 14727K,暂停23ms 05-02 11:28:30.163:I / dalvikvm-heap(28455):将堆(frag case)增长到13.883MB,用于1401676字节分配 05-02 11:28:30.202:D / dalvikvm(28455):GC_CONCURRENT释放3K,4%免​​费14179K / 14727K,暂停2ms + 2ms 05-02 11:28:30.218:E / recipedisplayscreen(28455):null.null

编辑结束

2 个答案:

答案 0 :(得分:2)

啊!您正在构建文本视图以编辑框。见行

inputMethod = (EditText) findViewById(R.id.textView2);
inputIngredients = (EditText) findViewById(R.id.textView1);

将其更改为

inputMethod = (TextView) findViewById(R.id.textView2);
inputIngredients = (TextView) findViewById(R.id.textView1);

并更改inputMethod和inputIngredients的声明。

除非你认为它们是EditTexts,否则你需要在你的布局中更改它recipe_button_list

答案 1 :(得分:1)

修改 在Logcat中,您将TextView转换为EditText。将XML-layout-file中的视图设置为EditText,它必须工作:)

inputMethod = (EditText) findViewById(R.id.textView2);
inputIngredients = (EditText) findViewById(R.id.textView1);

修改-END

您将数据放在第一个活动中:

Intent i= new Intent(this, recipedisplayscreen.class);
//Sending data to the next screen
i.putExtra("textView1", inputIngredients.getText().toString());
i.putExtra("textView2", inputMethod.getText().toString());

在RecipeDisplayScreen中,您可以在onCreate()

中获取数据
Bundle extras = getIntent().getExtras();

String myText1;
String myText2;


if(extras != null) {
   if (extras.containsKey("textView1") {
      myText1 = extras.getString("textView1");
   }
   if (extras.containsKey("textView2") {
      myText2 = extras.getString("textView2");
   }
}

我希望它适合你!如果没有,请发布您的日志输出:)

一些提示: 考虑好的关键名称并将它们设置为constans:

public static final String INGREDIENTS_KEY = "INGREDIENTS_TEXT_KEY";
public static final String METHOD_KEY = "METHOD_TEXT_KEY";

用于课程名称ALWAYS大写字母 recipedisplayscreen => RecipeDisplayScreen 对于字段使用小写字母: 字符串方法=> String txtMethod; TextView MethodDisplay => TextView methodView;