現在、ActionBarSherlockを使用してアクションバーを作成しています。現在、前のアクティビティでIDから選択された配列から作成されたタブがあります。デフォルトでは、アプリはこのページから起動し、デフォルトで最初の配列の最初のタブを選択します。私が抱えている問題は、向きが変わり、アクティビティが破棄されて再度作成され、最初の配列の最初のタブが表示される場合です。プリフォームonCreateのときに、保存されたタブをタブに表示させようとしましたが、興味深い結果が得られましたが、間違った結果になりました。私はAndroidに関してはウィザードではありません。これが、簡単な修正であることを望んでいます。
アプリが行うことは、ユーザーが前のアクティビティからカテゴリを選択することです。インテントから送信されたIDに基づいて、さまざまなタブが必要な場合と不要な場合があります。そこで、配列を使用してカテゴリのタブを作成しました。タブが選択されると、JSONクエリを実行して情報を取得し、リストビューに表示します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
setContentView(R.layout.pt_section);
//use array within array to make tabs
ActionBar bar = getSupportActionBar();
ActionBar.Tab tab =null;
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
String[][] section_id_name = {
{ "News", "Opinion", "Features", "Sports", "Sustainable Life"}
,{ "News", "Opinion", "Features", "Sports"}
,{ "News", "Features" }
};
String[][] section_id = {
{ "1", "4", "13", "41", "42"}
,{ "5", "7", "11", "12"}
,{ "8", "9" }
};
Intent intent = getIntent();
//Check if sid is null
sid = intent.getStringExtra(PT_newspapers.INTENT_ID);
if (sid == null){
sid = "0";
}
sid_int = Integer.parseInt(sid);
for (int i = 0; i < section_id[sid_int].length; i++) {
tab = getSupportActionBar().newTab();
tab.setText(section_id_name[sid_int][i]);
//sid = sid1id[i];
tab.setTag(section_id[sid_int][i]);
tab.setTabListener(this);
getSupportActionBar().addTab(tab);
System.out.println(section_id[sid_int][i]);
}
if (savedInstanceState != null) {
bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 1));
System.out.println("not null!");
}
}//End onCreate method
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("tab", getSupportActionBar().getSelectedNavigationIndex());
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
sectionid = tab.getTag().toString();
System.out.println("Tab selected with id of :" + sectionid);
productsList = new ArrayList<HashMap<String, String>>();
System.out.println("Now executing LoadAllProducts class");
new LoadAllProducts().execute(); //Calls to class LoadAllProducts
ListView lv = (ListView)findViewById(R.id.list2);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String id2 = ((TextView) view.findViewById(R.id.id_tag)).getText()
.toString();
// Starting new intent
Intent in = new Intent(getApplicationContext(),PT_Article.class);
// sending sid to next activity
in.putExtra(INTENT_ID, id2);
// starting new activity and expecting some response back
//startActivity(in);
startActivityForResult(in, 100);
overridePendingTransition(0,0);
//mError.setText("Error, No stories loaded");
}
});
} //End onTabSelected
向きが変わると、アプリはタブの変更に適切なストーリーを表示するように動作しますが、最初に切り替えたときに、現在のタブを保存しますが、間違ったデータを表示します。
私は一日中これを理解しようとしてきましたが、運がなかったので、どんな洞察も大歓迎です。