1

現在、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 

向きが変わると、アプリはタブの変更に適切なストーリーを表示するように動作しますが、最初に切り替えたときに、現在のタブを保存しますが、間違ったデータを表示します。

私は一日中これを理解しようとしてきましたが、運がなかったので、どんな洞察も大歓迎です。

4

0 に答える 0