3

タブホストがあり、そこに 3 つのアクティビティ (タブごとに 1 つのアクティビティ) を追加します。タブを変更するたびに、アクティビティで新しいインターンを呼び出す方法を知る必要があります。タブホストのリスナーを追加しました。clearAllTabs();メソッドを使用してリスナー内にすべてのタブを再度追加すると、アプリがクラッシュします。ユーザーがクリックした特定のタブをビューから削除するコードを使用するとtabHost.getTabWidget().removeView(tabHost.getTabWidget().getChildTabViewAt(i)); tabHost.addTab(the tab I want to replace);

次に、新しいタブがタブホストの最後に配置されます。

ユーザーが特定のタブをクリックするたびに比例アクティビティをリロードする方法の例が必要です。

私のコード:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // ActionBar bar = getSupportActionBar();

        // requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        Resources res = getResources();
        LocalActivityManager mlam = new LocalActivityManager(this, false);
        final TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);
        mlam.dispatchCreate(savedInstanceState);
        tabHost.setup(mlam);
        TabHost.TabSpec spec;
        Intent intent;

        // TabHost tabHost = getTabHost();
        // tabHost.setup();

        TabSpec specAll = tabHost.newTabSpec("All");
        specAll.setIndicator("All");
        Intent allIntent = new Intent(this, allActivity.class);
        specAll.setContent(allIntent);

        // specAll.setContent(R.id.allList);

        Log.d("SpecAll",""+specAll.setContent(allIntent));

        TabSpec specIn = tabHost.newTabSpec("in");
        specIn.setIndicator("In");
        Intent inIntent = new Intent(this, inActivity.class);
        specIn.setContent(inIntent);

        TabSpec specOut = tabHost.newTabSpec("Out");
        specOut.setIndicator("Out");
        Intent outIntent = new Intent(this, outActivity.class);
        specOut.setContent(outIntent);

        // Adding all TabSpec to TabHost
        tabHost.addTab(specAll); // Adding all tab
        tabHost.addTab(specIn); // Adding in tab
        tabHost.addTab(specOut); // Adding out tab



        tabHost.setOnTabChangedListener(new OnTabChangeListener() {



                        @Override
                        public void onTabChanged(String tabId) {

                            int i = tabHost.getCurrentTab();
                            //Log.i("@@@@@@@@ ANN CLICK TAB NUMBER", "------" + i);

                            if (i == 0) {
                                Log.d("TAB","" +i);

                            } else if (i == 1) {
                                Log.d("TAB","" +i);
                            }
                            else
                                Log.d("TAB", ""+i);
                        }
                    });


    }
4

3 に答える 3

4

アクティビティとタブホストに問題があるようです。アクティビティをリロードするには、次のことを行う必要があります。

specAll.setContent(yourIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));

tabHost.addTab の直前

于 2012-08-14T15:24:43.277 に答える
3

タブフラグメントを永続化する必要がない単純なケースでは、次のコードを使用します

        int currentTabId = mTabHost.getCurrentTab();
    mTabHost.clearAllTabs();
    setupTabs();
    mTabHost.setCurrentTab(currentTabId);
于 2014-02-14T09:00:38.607 に答える
0

私も同じ問題に直面していますが、この問題を次のように解決します...

これは私のTabActivityです....

public class MainActivity extends TabActivity {
TabHost tabhost;
String cTab = "0";
String nTab;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    tabhost = getTabHost();

    TabSpec one = tabhost.newTabSpec("0");

    // setting Title and Icon for the Tab
    one.setIndicator("", getResources().getDrawable(R.drawable.ic_launcher));
    Intent songsIntent = new Intent(this, FirstActivity.class);
    one.setContent(songsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    one.setContent(songsIntent);

    TabSpec two = tabhost.newTabSpec("1");
    // setting Title and Icon for the Tab
    two.setIndicator("", getResources().getDrawable(R.drawable.ic_launcher));
    Intent songsIntent1 = new Intent(this, SecondActivity.class);
    two.setContent(songsIntent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    two.setContent(songsIntent1);

    TabSpec three = tabhost.newTabSpec("2");
    // setting Title and Icon for the Tab

    three.setIndicator("",
            getResources().getDrawable(R.drawable.ic_launcher));
    Intent songsIntent4 = new Intent(this, ThirdActivity.class);
    three.setContent(songsIntent4.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    three.setContent(songsIntent4);

    TabSpec four = tabhost.newTabSpec("3");
    // setting Title and Icon for the Tab
    four.setIndicator("", getResources()
            .getDrawable(R.drawable.ic_launcher));
    Intent songsIntent5 = new Intent(this, FourthActivity.class);
    four.setContent(songsIntent5.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    four.setContent(songsIntent5);

    tabhost.addTab(one);
    tabhost.addTab(two);
    tabhost.addTab(three);
    tabhost.addTab(four);
    tabhost.setOnTabChangedListener(new OnTabChangeListener() {
        @Override
        public void onTabChanged(String arg0) {
            cTab = "" + tabhost.getCurrentTab();

        }
    });

    int numberOfTabs = tabhost.getTabWidget().getChildCount();
    for (int t = 0; t < numberOfTabs; t++) {
        tabhost.getTabWidget().getChildAt(t)
                .setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        if (event.getAction() == MotionEvent.ACTION_UP) {
                            String currentSelectedTag = MainActivity.this
                                    .getTabHost().getCurrentTabTag();
                            nTab = currentSelectedTag;
                            System.out.println(" nTab  " + nTab);
                            System.out.println("  cTab  " + cTab);
                            if (cTab.equals(nTab)) {
                                if (nTab.equals("0")) {
                                    Intent intent = new Intent();
                                    intent.setAction("com.ensis.first");
                                    MainActivity.this.sendBroadcast(intent);
                                }
                                if (nTab.equals("1")) {
                                    Intent intent = new Intent();
                                    intent.setAction("com.ensis.second");
                                    MainActivity.this.sendBroadcast(intent);
                                }
                                if (nTab.equals("2")) {
                                    Intent intent = new Intent();
                                    intent.setAction("com.ensis.third");
                                    MainActivity.this.sendBroadcast(intent);
                                }
                                if (nTab.equals("3")) {
                                    Intent intent = new Intent();
                                    intent.setAction("com.ensis.fourth");
                                    MainActivity.this.sendBroadcast(intent);
                                }
                            }
                        }
                        return false;
                    }
                });
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
 }}

これは私の FirstActivity.java です

    public class FirstActivity extends ActivityGroup{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

ok();
IntentFilter filter = new IntentFilter("com.ensis.first");
registerReceiver(myReceiver, filter);

/**/
    }

    private void ok() {
// TODO Auto-generated method stub
setContentView(R.layout.firstscreen);
Button bt=(Button)findViewById(R.id.button1);
bt.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent it=new Intent(FirstActivity.this,SubActivity.class);
        replaceContentView("activity3", it);
    }
  });
      }

          public void replaceContentView(String id, Intent newIntent) {
        View view = getLocalActivityManager().startActivity(id,newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
        this.setContentView(view);
    }

     private BroadcastReceiver myReceiver = new BroadcastReceiver()
     {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("22222222222222222", "22222222222");
        ok();
    }
      };}
于 2013-04-29T17:32:18.177 に答える