Android:Activity to Activity,第2个活动无法调用setContentView?

时间:2011-04-20 12:47:51

标签: java android android-activity

我有活动1(A1)进入活动2(A2)并且在A2中的setContentView崩溃。 A1是一个ListActivity,它从xml中提取列表并使用Intent传递要在A2(putExtra)中显示的数据。 A2拉入xml并使用A1中的Extra数据来知道要显示的内容,但是我的setContentView行崩溃了应用程序。

研究可能的解决方案我已经读过必须从UI线程调用setContentView;我的A2不是UI线程吗?

代码:

- A1 -

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);
    }
}

- A2 -

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);
}
}

我已阅读有关活动和内容视图的文档,但他们没有尽力解释无法完成的工作。我在这里绊倒自己的脚吗?

清单:

<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>

4 个答案:

答案 0 :(得分:1)

您只能使用布局资源(例如R.layout.mylayout)调用setContentView,而不是像您在此处使用的TextView一样调用View对象。

答案 1 :(得分:1)

A2中的类扩展了A1(活动)中的类。你可能想扩展android.app.Activity。

答案 2 :(得分:1)

答案由继承给出。

A1的流程:activity扩展ListActivity并调用setContentView(),即可。

A2的流程:Activity1扩展了activityonCreate() Activity1super.onCreate()activity.onCreate() setContentView()。在那里,您已调用Activity1.onCreate(),因此无法再次在{{1}}中调用它。

答案 3 :(得分:1)

你的代码有点遍布,但你想要更像这样的东西。你最大的问题是你实际上评论了你需要的线! 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 notepad tutorials,特别是记事本2,它可以做你需要的事情