【问题标题】:How to launch activity based on tab bar item?如何根据标签栏项目启动活动?
【发布时间】:2015-07-12 02:29:40
【问题描述】:

我想根据标签栏项目的点击启动不同的活动,但我在“windows 类”中得到一个空白页作为启动的活动。我打算做的是在点击标签栏项目时启动不同的活动。

标签栏活动类

import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TabHost;


public class TabBar extends FragmentActivity {

    ViewPager Tab;
    TabPagerAdapter TabAdapter;
    ActionBar actionBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tabbardefault);


        try {

            TabAdapter = new TabPagerAdapter(getSupportFragmentManager());

            Tab = (ViewPager) findViewById(R.id.pager);
            Tab.setOnPageChangeListener(
                    new ViewPager.SimpleOnPageChangeListener() {
                        @Override
                        public void onPageSelected(int position) {

                            actionBar = getActionBar();
                            actionBar.setSelectedNavigationItem(position);
                        }
                    });
            Tab.setAdapter(TabAdapter);

            actionBar = getActionBar();
            //Enable Tabs on Action Bar
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        }
        catch (Exception e)
        {

        }
        ActionBar.TabListener tabListener = new ActionBar.TabListener(){

            @Override
            public void onTabReselected(android.app.ActionBar.Tab tab,
                                        FragmentTransaction ft) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {

                Tab.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(android.app.ActionBar.Tab tab,
                                        FragmentTransaction ft) {
                // TODO Auto-generated method stub

            }};


        //Add New Tab
        actionBar.addTab(actionBar.newTab().setText("Home").setTabListener(tabListener));
        actionBar.addTab(actionBar.newTab().setText("Celeb").setTabListener(tabListener));
        actionBar.addTab(actionBar.newTab().setText("Videos").setTabListener(tabListener));


    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

TabPagerAdapter

import android.content.Intent;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;

public class TabPagerAdapter extends FragmentStatePagerAdapter {
    public TabPagerAdapter(FragmentManager fm) {
        super(fm);
        // TODO Auto-generated constructor stub
    }

    @Override
    public Fragment getItem(int i) {
        switch (i) {
        case 0:
            //Fragement for Android Tab

            return new Android();
        case 1:
           //Fragment for Ios Tab
            return new Ios();
        case 2:
            //Fragment for Windows Tab
            return new Windows();
        }
        return null;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 3; //No of Tabs
    }


    }

窗户

    public class Windows extends Fragment {
     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

            View windows = inflater.inflate(R.layout.feed_main, container, false);
            //((TextView)windows.findViewById(R.id.textView)).setText("Windows");
            return windows;
}}

【问题讨论】:

  • 一个活动还是片段?
  • @Elltz 活动,因为我想在此过程中指出三个不同的活动
  • 好的,那么您想从哪里开始活动?因为查看您的代码,您实际上并没有启动任何 Activity,只是试图在片段之间切换
  • @Elltz 检查我尝试过的 Windows 类“查看 windows = inflater.inflate(R.layout.feed_main, container, false);”
  • 对不起,先生,您看,先生,这是一个片段而不是一个活动

标签: android android-tabhost android-fragmentactivity


【解决方案1】:

回答你,你实际上并没有启动一个 Activity,而是通过 Fragments 进行切换,Fragment 只是一个自定义视图,如果你想在之后启动一个 Activity,你可以膨胀一个 xml 来表示作为 Fragment 的自定义视图你的选项卡被选中然后你打电话给startActivity(Intent);startActivity(new Intent(classname.this,the_class_i_want_to_start.class));

而你的Windows 类扩展Fragment 它应该是Activity 如果你想要的是Fragment 的功能那么你就没有问题

希望它清晰

【讨论】:

    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 2019-03-29
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多