Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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
Java 单击按钮将片段添加到寻呼机适配器_Java_Android - Fatal编程技术网

Java 单击按钮将片段添加到寻呼机适配器

Java 单击按钮将片段添加到寻呼机适配器,java,android,Java,Android,我有一个带有1个片段的选项卡式活动,这个片段有一个按钮,我想当我单击按钮时,它会创建一个新片段,我可以在两个片段之间滑动 这是主要的活动 public class ActivityBeamRec extends AppCompatActivity { private SectionsPagerAdapter mSectionsPagerAdapter; public static CustomViewPager mViewPager; @Override p

我有一个带有1个片段的选项卡式活动,这个片段有一个按钮,我想当我单击按钮时,它会创建一个新片段,我可以在两个片段之间滑动

这是主要的活动

public class ActivityBeamRec extends AppCompatActivity {

    private SectionsPagerAdapter mSectionsPagerAdapter;

    public static CustomViewPager mViewPager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity_beam_rec);

        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
        // Set up the ViewPager with the sections adapter.
        mViewPager = (CustomViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);
        mViewPager.setPagingEnabled(false);

            }

    public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
                       switch (position){
                case 0 : return PlaceholderFragment.newInstance(position + 1);
         //       case 1 : return the new fragment ;
            }
            return null;
        }

        @Override
        public int getCount() {

            return 1 ; 
        }

            }
}
这是我的碎片

public  class PlaceholderFragment extends Fragment {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    private static final String ARG_SECTION_NUMBER = "section_number";

    public PlaceholderFragment() {
    }

    /**
     * Returns a new instance of this fragment for the given section
     * number.
     */
    public static PlaceholderFragment newInstance(int sectionNumber) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.fragment_activity_beam_rec, container, false);

        final EditText etxb;
     etxb = (EditText)rootView.findViewById(R.id.editText);
     final Button buDesign = (Button)rootView.findViewById(R.id.buDesign);

        buDesign.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    double b;          
    b = Double.valueOf(etxb.getText().toString());

\\here i want the button to create the second fragment and pass the variable d to it
 ActivityBeamRec.mViewPager.setPagingEnabled(true); // this is to enable the siwpe between the fragments
ActivityBeamRec.mViewPager.setCurrentItem(2); // ths is to set the new fragment as the current view

            }
        });
        return rootView;
    }



}

按下按钮后,第二个片段应该在创建视图阶段完成,如果有办法,请告诉我将每个代码放在哪里。

在您的部分SPAGERAAdapter中

private ArrayList<Fragment> fragments = new ArrayList<>();

@Override
public int getCount() {
   return fragments.size();
}

@Override
public Fragment getItem(int position) {
  if(position<fragments.size())
      return fragments.get(position);
  throw new NullPointerException("No Fragment with this position found.");
}
public void addFragment(Fragment newFragment){
  fragments.add(newFragment);
}

在你的房间里

private ArrayList<Fragment> fragments = new ArrayList<>();

@Override
public int getCount() {
   return fragments.size();
}

@Override
public Fragment getItem(int position) {
  if(position<fragments.size())
      return fragments.get(position);
  throw new NullPointerException("No Fragment with this position found.");
}
public void addFragment(Fragment newFragment){
  fragments.add(newFragment);
}

ActivityBeamRec:

public class ActivityBeamRec extends AppCompatActivity {

    private SectionsPagerAdapter mSectionsPagerAdapter;

    private ViewPager mViewPager;

    private TabLayout tabLayout;

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

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // Create the adapter that will return a fragment for each of the three
        // primary sections of the activity.
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(mViewPager);
    }


    @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_main, 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);
    }


    /**
     * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
     * one of the sections/tabs/pages.
     */
    public class SectionsPagerAdapter extends FragmentPagerAdapter {
        // This list holds the fragments for the pages displayed by view pager.
        private List < Fragment > fragments = new ArrayList < Fragment > ();

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
            // Add the first fragment:
            fragments.add(PlaceholderFragment.newInstance(1));
        }

        private void addFragment(Fragment fragment) {
            fragments.add(fragment);

            // Notify view pager that the contents of the adapter has changed and that it needs to update
            // its pages:
            notifyDataSetChanged();

            // Since content of view pager has changed, re-wire tab layout:
            tabLayout.setupWithViewPager(mViewPager);

            // Set the current page in the view pager to the last added fragment:
            mViewPager.setCurrentItem(fragments.size() - 1);
        }

        @Override
        public Fragment getItem(int position) {
            return fragments.get(position);
        }

        @Override
        public int getCount() {
            return fragments.size();
        }

        @Override
        public CharSequence getPageTitle(int position) {
            // Set the tab title as the number of the current section:
            return "SECTION " + (position + 1);
        }
    }

    /**
     * Adds a new fragment (page) to the view pager.
     * This method can either be public or package-private (without any modifier) depending on the package
     * of 'PlaceholderFragment'. Since you're new to Java please refer the link to access modifiers below.
     *
     * @param fragment the fragment to be added to the view pager
     **/
    public void addFragment(Fragment fragment) {
        mSectionsPagerAdapter.addFragment(fragment);
    }

    /**
     * Returns the number of the next section (page) to be added.
     *
     * @return the next section number
     */
    public int getNextSectionNumber() {
        return mSectionsPagerAdapter.getCount() + 1;
    }

}
public class PlaceholderFragment extends Fragment {

    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    private static final String ARG_SECTION_NUMBER = "section_number";

    public PlaceholderFragment() {}

    /**
     * Returns a new instance of this fragment for the given section
     * number.
     */
    public static PlaceholderFragment newInstance(int sectionNumber) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, sectionNumber);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.fragment_activity_beam_rec, container, false);

        final EditText etxb;
        etxb = (EditText) rootView.findViewById(R.id.editText);
        final Button buDesign = (Button) rootView.findViewById(R.id.buDesign);

        buDesign.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                double b;
                b = Double.valueOf(etxb.getText().toString());

                //here i want the button to create the second fragment and pass the variable d to it
                int nextSectionNumber = ((ActivityBeamRec) getActivity()).getNextSectionNumber();
                ((ActivityBeamRec) getActivity()).addFragment(PlaceholderFragment.newInstance(nextSectionNumber));
            }
        });
        return rootView;
    }
}
单击片段中的按钮时,以下事件按顺序发生:

  • 父活动的
    addFragment()
    方法通过传递要添加的片段实例来调用。此公共方法用于访问父活动的私有成员
    mSectionsPagerAdapter
    。如果
    mSectionsPagerAdapter
    公开或包私有,我们可以取消这种方法
  • SectionsPagerAdapter
    将传入的片段添加到其片段列表中,然后通知视图寻呼机其数据集已更改
  • TabLayout
    将刷新以适应新片段(第页)
  • 最后,使用
    setCurrentItem()
    方法使视图寻呼机滚动到添加的片段
  • 参考:


    活动beamrec:

    public class ActivityBeamRec extends AppCompatActivity {
    
        private SectionsPagerAdapter mSectionsPagerAdapter;
    
        private ViewPager mViewPager;
    
        private TabLayout tabLayout;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            // Create the adapter that will return a fragment for each of the three
            // primary sections of the activity.
            mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    
            // Set up the ViewPager with the sections adapter.
            mViewPager = (ViewPager) findViewById(R.id.container);
            mViewPager.setAdapter(mSectionsPagerAdapter);
    
            tabLayout = (TabLayout) findViewById(R.id.tabs);
            tabLayout.setupWithViewPager(mViewPager);
        }
    
    
        @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_main, 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);
        }
    
    
        /**
         * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
         * one of the sections/tabs/pages.
         */
        public class SectionsPagerAdapter extends FragmentPagerAdapter {
            // This list holds the fragments for the pages displayed by view pager.
            private List < Fragment > fragments = new ArrayList < Fragment > ();
    
            public SectionsPagerAdapter(FragmentManager fm) {
                super(fm);
                // Add the first fragment:
                fragments.add(PlaceholderFragment.newInstance(1));
            }
    
            private void addFragment(Fragment fragment) {
                fragments.add(fragment);
    
                // Notify view pager that the contents of the adapter has changed and that it needs to update
                // its pages:
                notifyDataSetChanged();
    
                // Since content of view pager has changed, re-wire tab layout:
                tabLayout.setupWithViewPager(mViewPager);
    
                // Set the current page in the view pager to the last added fragment:
                mViewPager.setCurrentItem(fragments.size() - 1);
            }
    
            @Override
            public Fragment getItem(int position) {
                return fragments.get(position);
            }
    
            @Override
            public int getCount() {
                return fragments.size();
            }
    
            @Override
            public CharSequence getPageTitle(int position) {
                // Set the tab title as the number of the current section:
                return "SECTION " + (position + 1);
            }
        }
    
        /**
         * Adds a new fragment (page) to the view pager.
         * This method can either be public or package-private (without any modifier) depending on the package
         * of 'PlaceholderFragment'. Since you're new to Java please refer the link to access modifiers below.
         *
         * @param fragment the fragment to be added to the view pager
         **/
        public void addFragment(Fragment fragment) {
            mSectionsPagerAdapter.addFragment(fragment);
        }
    
        /**
         * Returns the number of the next section (page) to be added.
         *
         * @return the next section number
         */
        public int getNextSectionNumber() {
            return mSectionsPagerAdapter.getCount() + 1;
        }
    
    }
    
    public class PlaceholderFragment extends Fragment {
    
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";
    
        public PlaceholderFragment() {}
    
        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
            final View rootView = inflater.inflate(R.layout.fragment_activity_beam_rec, container, false);
    
            final EditText etxb;
            etxb = (EditText) rootView.findViewById(R.id.editText);
            final Button buDesign = (Button) rootView.findViewById(R.id.buDesign);
    
            buDesign.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    double b;
                    b = Double.valueOf(etxb.getText().toString());
    
                    //here i want the button to create the second fragment and pass the variable d to it
                    int nextSectionNumber = ((ActivityBeamRec) getActivity()).getNextSectionNumber();
                    ((ActivityBeamRec) getActivity()).addFragment(PlaceholderFragment.newInstance(nextSectionNumber));
                }
            });
            return rootView;
        }
    }
    
    单击片段中的按钮时,以下事件按顺序发生:

  • 父活动的
    addFragment()
    方法通过传递要添加的片段实例来调用。此公共方法用于访问父活动的私有成员
    mSectionsPagerAdapter
    。如果
    mSectionsPagerAdapter
    公开或包私有,我们可以取消这种方法
  • SectionsPagerAdapter
    将传入的片段添加到其片段列表中,然后通知视图寻呼机其数据集已更改
  • TabLayout
    将刷新以适应新片段(第页)
  • 最后,使用
    setCurrentItem()
    方法使视图寻呼机滚动到添加的片段
  • 参考:


    抱歉,我是java新手,我的分区寻呼机适配器位于主活动
    专用分区SpagerAdapter mSectionsPagerAdapter我如何添加您的代码?抱歉,我是java新手,我的分区寻呼机适配器位于主活动
    私有分区SpagerAdapter mSectionsPagerAdapter我如何为您添加代码?