Java 替换旧片段以在viewpager中添加新片段
我有这个密码。在设置片段时,我有一个按钮,单击该按钮时,我想查看新片段Java 替换旧片段以在viewpager中添加新片段,java,android,android-fragments,Java,Android,Android Fragments,我有这个密码。在设置片段时,我有一个按钮,单击该按钮时,我想查看新片段 public class TabsPagerAdapter extends FragmentPagerAdapter { public TabsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int index) { switch (index) { case 0: // Top Rated fr
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
// Top Rated fragment activity
Log.i("TAB", "Home");
return new HomePage();
case 1:
// Games fragment activity
Log.i("TAB", "Contact");
return new GetContacts();
case 2:
// Movies fragment activity
Log.i("TAB", "Setting");
return new Settings();
}
return null;
}
我把碎片延伸到一页一页 好的,下面是如何在片段A中添加按钮以切换片段c: 1-在xml文件中的片段a中添加按钮,其id如下:
<Button
android:id="@+id/foo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="go to fragemnt c" />
然后返回到MainActivity,实现buttonClick接口并重写名为buttonClick的方法中的方法(视图v);查看寻呼机的setCurrentItem如下所示:
calss MainActivity implements FragmentA.buttonClick {
// your code here ...
public void buttonClicked(View v){
//get your viewPager var
viewPager.setCurrentItem(3);
}
}
我希望这有助于你有多种方法来实现你的“我想查看新片段” “新片段”的意思可能是“新内容和ui”,如果是这样的话,你可以“欺骗”你的方式,并用重叠视图膨胀布局,设置为
可见或消失
例如
但是,如果布局非常复杂,这种方法可能会使视图树膨胀。而且,适当的片段可能会做太多的事情,你想把它们分成多个片段
如果是这种情况,您必须了解应用程序的配置更改或重新启动,并处理这些更改(即保存您的状态并重新初始化正确的片段)。如果您对此没有异议,则可以在运行时更改ViewPager中的片段:
public class TabsPagerAdapter extends FragmentPagerAdapter {
protected Fragment[] fragments;
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
initFragPageCount();
}
private void initFragPageCount() {
fragments = new Fragment[3];
}
@Override
public int getCount() {
return fragments.length;
}
@Override
public Fragment getItem(int position) {
Fragment f = fragments[position];
if (f == null) {
f = initFragment(position);
}
return f;
}
private Fragment initFragment(int position) {
Fragment f = fragments[position];
if (f == null) {
switch (position) {
case 0:
f = new HomePage();
fragments[position] = f;
break;
case 1:
f = new GetContacts();
fragments[position] = f;
break;
case 2:
f = new Settings();
fragments[position] = f;
break;
}
}
return f;
}
public void replaceFrag(Fragment f, int index) {
if (index > 0 && index < fragments.length) {
fragments[i] = f;
}
notifyDataSetChanged();
}
}
动态添加或删除viewpager中的片段。
要加载不同的片段,请调用setupViewPagerCustom(viewPager)。
e、 g.点击按钮调用:setupViewPagerCustom(viewPager)
private void setupViewPager(ViewPager-ViewPager)
{
ViewPagerAdapter适配器=新的ViewPagerAdapter(getSupportFragmentManager());
addFrag(新fragmnet1(),“HOME”);
addFrag(新fragmnet2(),“服务”);
viewPager.setAdapter(适配器);
}
专用void设置ViewPageRCUSTOM(ViewPager ViewPager)
{
ViewPagerAdapter适配器=新的ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(新fragmnet3(),“联系我们”);
addFrag(新fragmnet4(),“关于我们”);
viewPager.setAdapter(适配器);
}
//Viewpageradapter,处理视图
静态类ViewPagerAdapter扩展了FragmentStatePagerAdapter
{
私有最终列表MFFragmentList=new ArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
公共视图页面编辑器(碎片管理器){
高级经理;
}
@凌驾
公共片段getItem(int位置){
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
@凌驾
public int getItemPosition(对象){
返回PagerAdapter.POSITION\u无;
}
public void addFrag(片段、字符串标题){
添加(片段);
MFFragmentTitleList.add(标题);
}
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
}
那么问题出在哪里?如何在viewpager中将片段替换为新片段。是否要将新片段替换为viewpager中的特定页面?!在这里,我发布了示例代码,并以这种方式进行了尝试
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/lyt_stuff_a"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/txt_stuff_a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This stuff is for content a" />
</LinearLayout>
<LinearLayout
android:id="@+id/lyt_stuff_b"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/txt_stuff_b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This stuff is for content b"
android:visibility="gone" />
</LinearLayout>
</RelativeLayout>
getView().findViewById(R.id.lyt_stuff_a).setVisibility(View.GONE);
getView().findViewById(R.id.lyt_stuff_b).setVisibility(View.VISIBLE);
public class TabsPagerAdapter extends FragmentPagerAdapter {
protected Fragment[] fragments;
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
initFragPageCount();
}
private void initFragPageCount() {
fragments = new Fragment[3];
}
@Override
public int getCount() {
return fragments.length;
}
@Override
public Fragment getItem(int position) {
Fragment f = fragments[position];
if (f == null) {
f = initFragment(position);
}
return f;
}
private Fragment initFragment(int position) {
Fragment f = fragments[position];
if (f == null) {
switch (position) {
case 0:
f = new HomePage();
fragments[position] = f;
break;
case 1:
f = new GetContacts();
fragments[position] = f;
break;
case 2:
f = new Settings();
fragments[position] = f;
break;
}
}
return f;
}
public void replaceFrag(Fragment f, int index) {
if (index > 0 && index < fragments.length) {
fragments[i] = f;
}
notifyDataSetChanged();
}
}
adaptPager.replaceFrag(new FragReplacement(), 2); // replaces the third Fragment in the Pager
private void setupViewPager(ViewPager viewPager)
{
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(new fragmnet1(), "HOME");
adapter.addFrag(new fragmnet2(), "SERVICES");
viewPager.setAdapter(adapter);
}
private void setupViewPagerCustom(ViewPager viewPager)
{
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(new fragmnet3(), "Contact us");
adapter.addFrag(new fragmnet4(), "ABOUT US");
viewPager.setAdapter(adapter);
}
//Viewpageradapter, handles the views
static class ViewPagerAdapter extends FragmentStatePagerAdapter
{
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager){
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
@Override
public int getItemPosition(Object object){
return PagerAdapter.POSITION_NONE;
}
public void addFrag(Fragment fragment, String title){
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position){
return mFragmentTitleList.get(position);
}
}