![](/img/trans.png)
[英]Trying to call a method from 1st class activity and keep the same argument in a 2nd class activity (android studio)
[英]Android: Activity to Activity, 2nd activity cannot call setContentView?
我有活动1(A1)进入活动2(A2),并且在A2中的setContentView崩溃。 A1是一个ListActivity,它从xml中提取列表,并使用Intent传递要在A2中显示的数据(putExtra)。 A2提取xml并使用A1中的Extra数据知道要显示的内容,但我的setContentView行使该应用程序崩溃。
在研究可能的解决方案时,我已经读到setContentView必须从UI线程中调用。 我的A2不是UI线程吗?
码:
public class activity extends ListActivity {
/** Called when the activity is first created. */
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
//setContentView(R.layout.main);
String[] rmenu = getResources().getStringArray(R.array.root_menu);
if (rmenu != null) {
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, rmenu));
}
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
// Get the item that was clicked
//Object o = this.getListAdapter().getItem(position);
//String keyword = o.toString();
//Toast.makeText(this, "You selected: " + position, Toast.LENGTH_LONG).show();
//
Intent myIntent = new Intent(v.getContext(), Activity1.class);
myIntent.putExtra("com.activity.Key", position);
startActivity(myIntent);
}
}
public class Activity1 extends activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
//setContentView(R.layout.main2);
int data = 0;
Bundle extras = getIntent().getExtras();
if (extras != null) {
data = extras.getInt("com.activity.Key");
} else {
data = 0;
}
String[] con = getResources().getStringArray(R.array.content);
//Toast.makeText(context, con[data], Toast.LENGTH_SHORT).show();
TextView tv = new TextView(this);
String dis = con[data];
tv.setText(dis);
setContentView(tv);
}
}
我已经阅读了关于Activity和ContentViews的文档,但是它们并不能很好地解释无法完成的工作。 我在这里绊倒自己吗?
表现:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.activity"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="4" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".activity" 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=".Activity1" android:label="@string/app_name"> </activity>
</application>
</manifest>
您只能使用Layout资源(例如R.layout.mylayout)调用setContentView,而不能使用此处使用的TextView之类的View对象。
您在A2中的课程扩展了在A1中的课程(活动)。 您可能想扩展android.app.Activity。
答案由继承给出。
A1: activity
的流程扩展了ListActivity
并调用setContentView()
,确定。
A2: Activity1
的流程扩展了activity
。 Activity1
onCreate()
调用super.onCreate()
,它是activity.onCreate()
。 那里您已经调用了setContentView()
因此无法再次在Activity1.onCreate()
调用它。
您的代码遍布各处,但您想要更多类似的东西。 您最大的问题是您实际上已经评论了所需的行! setContentView(R.layout.main);
public class Activity1 extends activity {
private EditText mText;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Bundle extras = getIntent().getExtras();
if (extras != null) {
data = extras.getInt("com.activity.Key");
} else {
data = 0;
}
mText = (EditText) findViewById(R.id.your_text_field);
mText.setText(Integer.toString(data));
}
}
希望对您有所帮助
我建议您做Google记事本教程 ,尤其是记事本2,它可以满足您的需求
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.