Lorsque j'imprime une TabActivity dans une autre TabActivity, startActivityForResult échoue lorsqu'elle est appelée à partir de la tabactivité interne. La nouvelle activité démarre, mais je reçois un message d'erreur:Android: Les tabactivités imbriquées ne fonctionnent pas avec startActivityForResult
startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent
et onActivityResult est jamais appelée lorsque l'activité revient.
Code à reproduire ci-dessous. Quatre classes, MyActivity est la classe principale avec deux onglets, NestedTab comporte trois onglets, tous les onglets contiennent SimpleActivity avec un bouton qui appelle SimpleDialog:
public class MyActivity extends TabActivity {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Populate a couple of tabs
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, SimpleActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("simple").setIndicator("Simple")
.setContent(intent);
tabHost.addTab(spec);
// Repeat
intent = new Intent().setClass(this, NestedTab.class);
spec = tabHost.newTabSpec("nested").setIndicator("Nested tabs")
.setContent(intent);
tabHost.addTab(spec);
}
}
public class NestedTab extends TabActivity {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent(this, SimpleActivity.class);
String tabs[]= {"One", "Two", "Three"};
for (String s : tabs)
{
intent.putExtra("name", s);
spec = tabHost.newTabSpec(s).setIndicator(s).setContent(intent);
tabHost.addTab(spec);
}
}
public class SimpleActivity extends Activity {
Button mBtn;
Context mCtx;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple);
mCtx = this;
mBtn = (Button) findViewById(R.id.btn);
mBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//To change body of implemented methods use File | Settings | File Templates.
startActivityForResult(new Intent(mCtx, SimpleDisplay.class), 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); //To change body of overridden methods use File | Settings | File Templates.
Toast.makeText(this, "Activity finished", Toast.LENGTH_LONG).show();
}
}
public class SimpleDisplay extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView text = new TextView(this);
text.setText("Just hit back button");
setContentView(text);
}
}
Pas en mesure de coller les fichiers xml, mais principale est identique à l'étape 4: http://developer.android.com/resources/tutorials/views/hello-tabwidget.html
et simple est juste un textview et un bouton.
Toute aide appréciée.
Vous devez repenser la conception de votre application si vous imbriquez un 'TabActivity' dans un autre' TabActivity'. –
Nous pensons que c'est la façon naturelle de présenter notre jeu de données et c'est une façon très courante de le faire. Par exemple. appstore sur iphone a Top 25 avec des options de sous-menu Top payé, top gratuit et top recettes. – Bitt