簡體   English   中英

Android:從活動到活動,第二個活動無法調用setContentView?

[英]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線程嗎?

碼:

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

我已經閱讀了關於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM