Android: активность к активности, вторая активность не может вызвать setContentView? - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть действие 1 (A1), переходящее в действие 2 (A2), и я получаю сбои в setContentView в A2.A1 - это ListActivity, которое извлекает список из xml и использует Intent для передачи данных, отображаемых в A2 (putExtra).A2 извлекает xml и использует дополнительные данные из A1, чтобы знать, что отображать, но моя строка setContentView приводит к сбою приложения.

Изучение возможных решений, которые я прочитал, должно вызывать setContentView из потока пользовательского интерфейса;мой A2 не является темой пользовательского интерфейса?

Код:

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

Я прочитал документы по Деятельности и 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>

Ответы [ 4 ]

1 голос
/ 20 апреля 2011

Ваши коды немного повсюду, но вы хотите что-то вроде этого. Самая большая проблема в том, что вы прокомментировали нужную вам строку! 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 , особенно Notepad 2, он делает то, что вам нужно

1 голос
/ 20 апреля 2011

Ваш класс в А2 расширяет класс в А1 (активность). Вы, вероятно, хотите расширить android.app.Activity.

1 голос
/ 20 апреля 2011

Ответ дается по наследству.

Поток для A1: activity расширяется ListActivity и вызывает setContentView(), что нормально.

Поток для A2: Activity1 расширяется activity.onCreate() из Activity1 звонит super.onCreate(), что является activity.onCreate().Там вы уже позвонили setContentView(), поэтому вы не можете позвонить в Activity1.onCreate() снова.

1 голос
/ 20 апреля 2011

Вы можете вызывать setContentView только с ресурсом Layout (например, R.layout.mylayout), но не с объектом View, подобным TextView, который вы использовали здесь.

...