片段菜单未打开新活动

时间:2013-06-24 07:10:34

标签: android android-fragments

请检查以下代码

    @SuppressWarnings("deprecation")
    public class AndroidTabLayoutActivity extends TabActivity implements OnTabChangeListener {
        TabHost tabHost;
        TabWidget tabWidget;
        Menu menu;
        View v;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            tabWidget = getTabWidget();
            tabHost = getTabHost();
            tabHost.setOnTabChangedListener(this);

            TabSpec eventbyspec = tabHost.newTabSpec("EventBy");
            // eventbyspec.setIndicator("EventBy",
            // getResources().getDrawable(R.drawable.icon_photos_tab));
            eventbyspec.setIndicator("EventBy");
            Intent eventbyIntent = new Intent(this, MainActivity.class);
            eventbyspec.setContent(eventbyIntent);

            // Tab for category
            TabSpec categoryspec = tabHost.newTabSpec("Category");
            categoryspec.setIndicator("Category");
            Intent categoryIntent = new Intent(this, CatagoryEvent.class);
            categoryspec.setContent(categoryIntent);


            // Adding all TabSpec to TabHost
            tabHost.addTab(eventbyspec); // Adding eventby tab
            tabHost.addTab(categoryspec); // Adding category tab    
        }


        @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
               MenuInflater inflater = getMenuInflater();
               int tab = getTabHost().getCurrentTab();

               if (tab==1)
                   inflater.inflate(R.menu.menu, menu); 
               return true;
            }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {

            switch (item.getItemId()) {
            case R.id.music:
                // Single menu item is selected do something
                // Ex: launching new activity/screen or show alert message
                Intent music_intent = new Intent(getApplicationContext(),MusicFragment.class);
                startActivity(music_intent);
                return true;
            case R.id.theatre:
                Intent music_intent = new Intent(getApplicationContext(),TheatreFragment.class);
                startActivity(music_intent);
                return true;

            default:
                return super.onOptionsItemSelected(item);
            }
        }

    }

MusicFragment.java在哪里

                public class MusicFragment extends Fragment implements OnClickListener {

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setHasOptionsMenu(true);
        }
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.music_layout, container, false);
            LinearLayout mLayout = (LinearLayout) v
                    .findViewById(R.id.catagory_linearlayout);

            mLayout.setBackgroundResource(R.drawable.music_full);
            TableLayout tableLayout = (TableLayout) v.findViewById(R.id.maintable);
            tableLayout.removeAllViews();
            for (int i = 0; i < 50; i++) {

                TableRow tableRow = new TableRow(v.getContext());
                tableRow.setPadding(10, 10, 10, 10);
                tableRow.setLayoutParams(new LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

                TextView tv = new TextView(v.getContext());
                tv.setTextColor(getResources().getColor(R.color.black_overlay));

                tv.setText("random text here 11");


                tableRow.addView(tv);

                tv.setOnClickListener(this);


                tableLayout.addView(tableRow, new TableLayout.LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

            }
            return v;
        }

        public void onClick(View arg0) {
            startActivity(new Intent(getActivity(), TextActivity.class));
        }

    }

和我的CatagoryEvent.java是

    public class CatagoryEvent extends FragmentActivity {

        SectionsPagerAdapter mSectionsPagerAdapter;
        ViewPager mViewPager;

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.catagory_layout);      

            mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
            mViewPager = (ViewPager) findViewById(R.id.pager);
            mViewPager.setAdapter(mSectionsPagerAdapter);
        }

        public class SectionsPagerAdapter extends FragmentPagerAdapter {
            public SectionsPagerAdapter(FragmentManager fm) {
                super(fm);
            }

             @Override
                public Fragment getItem(int position) {
                    Fragment fragment;
                    switch (position) {
                        case 0:
                            fragment = new MusicFragment();
                            break;
                        case 1:
                            fragment = new TheatreFragment();
                            break;                 
                        default:
                            fragment  = null;
                            break;
                    }
                    return fragment;

                }
            @Override
            public int getCount() {
                // Show 3 total pages.
                return 2;
            }       
            @Override
            public CharSequence getPageTitle(int position) {
                Locale l = Locale.getDefault();
                switch (position) {
                case 0:
                    return getString("Music");
                case 1:
                    return getString("Theatre");

                }
                return null;
            }   
        }
    }

问题

问题出在点击菜单项MusicFragment.java未调用 并要求在androidmanifaste中声明 但无法在androidmanifaste上声明它

有没有办法从活动中调用片段类?

1 个答案:

答案 0 :(得分:1)

不,你不能。如果您查看代码,您已经可以自己看到问题:您使用了“startActivity”#39;开始片段。

片段需要在活动中托管,才能生存。但是,您可以将此Fragment包装到空的Activity中,然后从onClick调用该Activity。