我正在写一本食谱书,我遇到了一个问题 - 我想把食谱清单中的文字发送到食谱显示屏,我必须做错事,因为我一直强行关闭:
这是我的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
编辑结束
答案 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;