Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用了片段中错误的@Override方法(Android)_Android_Android Fragments_Overriding_Android Arrayadapter_Android Contextmenu - Fatal编程技术网

调用了片段中错误的@Override方法(Android)

调用了片段中错误的@Override方法(Android),android,android-fragments,overriding,android-arrayadapter,android-contextmenu,Android,Android Fragments,Overriding,Android Arrayadapter,Android Contextmenu,我在使用片段时遇到问题。 首先是一些基本信息。我正在使用一个带有3个选项卡/片段的操作栏(support.v4)。前两个片段会导致问题。第一个片段扩展ListFragment,第二个片段扩展Fragment。两者都有一个列表视图和一个阵列适配器(不同的阵列适配器) 我的片段: 在这两个片段中,我创建了一个上下文菜单(不同的菜单/菜单项): 在这两个片段中,我覆盖了onCreateContextMenu(..)和onContextItemSelected(..) 我的适配器: 两个适配器都覆盖ge

我在使用片段时遇到问题。
首先是一些基本信息。我正在使用一个带有3个选项卡/片段的
操作栏(support.v4)。前两个片段会导致问题。第一个片段扩展ListFragment,第二个片段扩展Fragment。两者都有一个
列表视图
和一个
阵列适配器
(不同的阵列适配器)

  • 我的片段:

    在这两个片段中,我创建了一个
    上下文菜单
    (不同的菜单/菜单项):

    在这两个片段中,我覆盖了
    onCreateContextMenu(..)
    onContextItemSelected(..)

  • 我的适配器:

    两个适配器都覆盖getView方法

  • 我的问题:

    • 如果我选择片段2的
      ContextItem
      ,则调用frament1的
      onContextItemSelected
      方法

    • 如果我更新片段2,也会调用片段1的getView

  • 在您的帮助和StackOverflow的帮助下,我已经发现,如果一个片段处于活动状态,那么它旁边的两个片段已经处于活动状态。因此,如果两个片段具有相同的可重写方法,那么将选择第一个。 问题是,我没有找到解决办法;-)

    这里有人了解我的问题和/或曾经处理过这个问题吗

    编辑:源代码

    公共类ActionBarActivity扩展了FragmentActivity实现
    ActionBar.TabListener{
    分段SPAGERADAPTER mSectionsPagerAdapter;
    ViewPager mViewPager;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    getWindow().requestFeature(Window.FEATURE\u ACTION\u栏);
    setContentView(R.layout.actionbarlayout);
    mSectionsPagerAdapter=newsectionspageradapter(getSupportFragmentManager());
    mViewPager=(ViewPager)findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    android.support.v4.app.FragmentManager fm=getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction ft=fm.beginTransaction();
    android.support.v4.app.Fragment myFirstFragment=(Fragment)新片段_ONE();
    android.support.v4.app.Fragment mySecondFragment=(Fragment)new Fragment_TWO();
    android.support.v4.app.Fragment myThirdFragment=(Fragment)新的Fragment_-THREE();
    ft.add(R.id.pager,myFirstFragment,“FIRSTFRAGTAG”);
    ft.add(R.id.pager,mySecondFragment,“SECONDFRAGTAG”);
    ft.add(R.id.pager,myThirdFragment,“thirdfragmtag”);
    ft.commit();
    fm.executePendingTransactions();
    公共类节SpagerAdapter扩展了FragmentPagerAdapter{
    公共部分SpagerAdapter(碎片管理器fm){
    超级(fm);
    }
    @凌驾
    公共片段getItem(int位置){
    开关(位置){
    案例0:
    片段myFirstFragment=新片段_ONE();
    返回我的第一个片段;
    案例1:
    片段mySecondFragment=newfragment_TWO();
    返回mySecondFragment;
    案例2:
    片段myThirdFragment=新片段_三();
    返回片段;
    违约:
    Fragment defaultFragment=新片段_ONE();
    返回默认片段;
    }
    }
    @凌驾
    public int getCount(){
    //显示共3页。
    返回3;
    }
    @凌驾
    公共字符序列getPageTitle(int位置){
    Locale l=Locale.getDefault();
    开关(位置){
    案例0:
    返回getString(R.string.title_section1).toUpperCase(l);
    案例1:
    返回getString(R.string.title_section2.toUpperCase(l);
    案例2:
    返回getString(R.string.title_section3).toUpperCase(l);
    }
    返回null;
    }
    @凌驾
    已选择的公共选项卡(ActionBar.Tab选项卡,
    碎片事务(碎片事务){
    setCurrentItem(tab.getPosition());
    }
    @凌驾
    已选择公共选项卡(ActionBar.Tab选项卡,
    碎片事务(碎片事务){
    }
    @凌驾
    已重新选择公共选项卡(ActionBar.Tab选项卡,
    碎片事务(碎片事务){
    }
    }
    公共类FirstAdapter扩展了ArrayAdapter{
    public BroadcastReceiver=新的BroadcastReceiver(){
    @凌驾
    公共void onReceive(上下文、意图){
    //一些代码
    }
    };
    公共FirstAdapter(上下文、ArrayList项){
    超级(上下文,0,项);
    //一些代码
    }
    @凌驾
    公共视图getView(int位置、视图转换视图、视图组父视图){
    //一些代码:codeONE
    返回视图;
    }
    }
    公共类SecondAdapter扩展了ArrayAdapter{
    public BroadcastReceiver=新的BroadcastReceiver(){
    @凌驾
    公共void onReceive(上下文、意图){
    //一些代码
    }
    };
    公共SecondAdapter(上下文、ArrayList项){
    超级(上下文,0,项);
    //一些代码
    }
    公共类片段\扩展ListFragment{
    公共碎片_ONE(){
    }
    @凌驾
    创建视图上的公共视图(布局、充气机、视图组容器、,
    Bundle savedInstanceState){
    视图根视图=充气机。充气(
    R.layout.firstfragment,容器,假);
    setRetainInstance(真);
    返回rootView;
    }
    @凌驾
    公共信息技术
    
    public class ActionBarActivity extends FragmentActivity implements
    ActionBar.TabListener {
    
    SectionsPagerAdapter mSectionsPagerAdapter;
    ViewPager mViewPager;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    
        setContentView(R.layout.actionbarlayout);
    
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);
    
        android.support.v4.app.FragmentManager      fm = getSupportFragmentManager();
        android.support.v4.app.FragmentTransaction  ft = fm.beginTransaction();
        android.support.v4.app.Fragment myFirstFragment     = (Fragment) new Fragment_ONE();
        android.support.v4.app.Fragment mySecondFragment    = (Fragment) new Fragment_TWO();
        android.support.v4.app.Fragment myThirdFragment     = (Fragment) new Fragment_THREE();
        ft.add(R.id.pager, myFirstFragment, "FIRSTFRAGTAG");
        ft.add(R.id.pager, mySecondFragment, "SECONDFRAGTAG");
        ft.add(R.id.pager, myThirdFragment, "THIRDFRAGTAG");
        ft.commit();
        fm.executePendingTransactions();
    
        public class SectionsPagerAdapter extends FragmentPagerAdapter {
    
        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }
    
        @Override
        public Fragment getItem(int position) {
            switch (position){
            case 0:
                Fragment myFirstFragment = new Fragment_ONE();
                return myFirstFragment;
            case 1:
                Fragment mySecondFragment = new Fragment_TWO();
                return mySecondFragment;
            case 2:
                Fragment myThirdFragment = new Fragment_THREE();
                return myThirdFragment;
            default: 
                Fragment defaultFragment = new Fragment_ONE();
                return defaultFragment;
    
            }
    
        }
        @Override
        public int getCount() {
            // Show 3 total pages.
            return 3;
        }
    
        @Override
        public CharSequence getPageTitle(int position) {
            Locale l = Locale.getDefault();
            switch (position) {
            case 0:
                return getString(R.string.title_section1).toUpperCase(l);
            case 1:
                 return getString(R.string.title_section2).toUpperCase(l);
            case 2:
                return getString(R.string.title_section3).toUpperCase(l);
            }
            return null;
         }
    
    
    
    
        @Override
            public void onTabSelected(ActionBar.Tab tab,
        FragmentTransaction fragmentTransaction) {
            mViewPager.setCurrentItem(tab.getPosition());
        }
    
    
    
    @Override
    public void onTabUnselected(ActionBar.Tab tab,
            FragmentTransaction fragmentTransaction) {
    }
    
    @Override
    public void onTabReselected(ActionBar.Tab tab,
            FragmentTransaction fragmentTransaction) {
    }
    
    }
    
    
                public class FirstAdapter extends ArrayAdapter<xxx> {
    
                    public BroadcastReceiver receiver = new BroadcastReceiver() {
    
                        @Override
                        public void onReceive(Context context, Intent intent) {
                            //SOME CODE
                        }
                    };
                    public FirstAdapter(Context context, ArrayList<xxx> items) {
                        super(context, 0, items);
                        // SOME CODE
                    }
    
                    @Override
                    public View getView(int position, View convertView, ViewGroup parent) {
                        // SOME CODE: codeONE
                        return convertView;
                    }
                }
    
                public class SecondAdapter extends ArrayAdapter<xxx> {
    
                    public BroadcastReceiver receiver = new BroadcastReceiver() {
    
                        @Override
                        public void onReceive(Context context, Intent intent) {
                            //SOME CODE
                        }
                    };
                    public SecondAdapter(Context context, ArrayList<xxx> items) {
                        super(context, 0, items);
                        // SOME CODE
                    }
    
                public  class Fragment_ONE extends ListFragment{
    
                    public Fragment_ONE() {
                    }
    
                    @Override
                    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                            Bundle savedInstanceState) {
                        View rootView = inflater.inflate(
                                R.layout.firstfragment, container, false);
                        setRetainInstance(true);
    
                        return rootView;
                    }
    
                    @Override
                    public void onActivityCreated (Bundle savedInstanceState) {
                        super.onActivityCreated(savedInstanceState);
                        mFirstListView =(ListView) getView().findViewById(android.R.id.list);
                        registerForContextMenu(mFirstListView);
    
                        mFirstAdapter = new FirstAdapter(myInstance, mItemsONE);
                        mFirstListView.setAdapter(mFirstAdapter);
    
                        @Override
                        public void onCreateContextMenu(ContextMenu menu, View v,
                            ContextMenuInfo menuInfo) {
    
                        super.onCreateContextMenu(menu, v, menuInfo);
    
                            if (v.getId() == android.R.id.list) {
                                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
                                menu.setHeaderTitle("CONTEXTMENU");
                                menu.add(FIRST_FRAGMENT_GROUP_ID, 0, 0, "1");
                                menu.add(FIRST_FRAGMENT_GROUP_ID, 1, 1, "2");
                                menu.add(FIRST_FRAGMENT_GROUP_ID, 2, 2, "3");
                                menu.add(FIRST_FRAGMENT_GROUP_ID, 3, 3, "4");
                                menu.add(FIRST_FRAGMENT_GROUP_ID, 4, 4, "5");
                                menu.add(FIRST_FRAGMENT_GROUP_ID, 5, 5, "6");
                            }
                        }
    
                        @Override
                        public boolean onContextItemSelected(MenuItem item) {
    
                            if (item.getGroupId()==FIRST_FRAGMENT_GROUP_ID){
                            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                                    .getMenuInfo();
    
                            int ListItemIndex = info.position;
    
                            Intent broadcast = new Intent(UPDATEREQUEST);
                            broadcast.putExtra(UPDATEREQUESTEXTRA, 1);
                            ActionBarActivity.getMyInstance().getApplicationContext().sendBroadcast(broadcast);
                            return true;
                            }
                        }
    
                        @Override
                        public void onListItemClick(ListView l, View v, int position, long id) {
                        }
                }
    
                public  class Fragment_TWO extends Fragment {
                    public Fragment_TWO() {
                    }
    
                    @Override
                    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                            Bundle savedInstanceState) {
                        View rootView = inflater.inflate(
                                R.layout.secondfragment, container, false);
                                setRetainInstance(true);
    
                        return rootView;
                    }
    
                    @Override
                    public void onActivityCreated (Bundle savedInstanceState) {
                        super.onActivityCreated(savedInstanceState);
    
                        mySecondListView = (ListView) getView().findViewById(R.id.secondListView);
    
                        mySecondAdapter = new SecondAdapter(myInstance, myItemsTWO);
                        mySecondListView.setAdapter(mySecondAdapter);
                        registerForContextMenu(mySecondListView);   
                    }
    
                    @Override
                    public void onCreateContextMenu(ContextMenu menu, View v,
                            ContextMenuInfo menuInfo) {
                        super.onCreateContextMenu(menu, v, menuInfo);
                        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
                        menu.setHeaderTitle("Options");
                        menu.add(SECOND_FRAGMENT_GROUP_ID, 1, 1, "1");
                        menu.add(SECOND_FRAGMENT_GROUP_ID, 2, 2, "2");
                    }
    
                    @Override
                    public boolean onContextItemSelected(MenuItem item) {
                        super.onContextItemSelected(item);
                        // SOME CODE
                        Intent broadcast = new Intent(UPDATEREQUEST);
                        broadcast.putExtra(UPDATEREQUESTEXTRA, 1);
                        ActionBarActivity.getMyInstance().getApplicationContext().sendBroadcast(broadcast);
                        return true;
                    }
    
                }
                    @Override
                    public View getView(int position, View convertView, ViewGroup parent) {
                        // SOME CODE: codeTWO
                        return convertView;
                    }
                }