Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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
Android 更改片段后,将取消ViewPager的内容_Android_Android Layout_Android Fragments_Android Viewpager_Android Fragmentactivity - Fatal编程技术网

Android 更改片段后,将取消ViewPager的内容

Android 更改片段后,将取消ViewPager的内容,android,android-layout,android-fragments,android-viewpager,android-fragmentactivity,Android,Android Layout,Android Fragments,Android Viewpager,Android Fragmentactivity,我带着一个新问题回来了。所以我现在创建了一个应用程序,当你点击一个按钮时,它可以从一个片段切换到另一个片段。在这两个片段中有两个viewPagers,它们创建自定义数量的按钮。但问题是,当我从一个片段切换到另一个片段,然后再切换回来,第一个片段的内容就不在这里了。我尝试了很多东西,但都没有真正帮助我。我希望你能帮助我。提前谢谢 主要活动: public class MainActivity extends AppCompatActivity { String identifiant=n

我带着一个新问题回来了。所以我现在创建了一个应用程序,当你点击一个按钮时,它可以从一个片段切换到另一个片段。在这两个片段中有两个viewPagers,它们创建自定义数量的按钮。但问题是,当我从一个片段切换到另一个片段,然后再切换回来,第一个片段的内容就不在这里了。我尝试了很多东西,但都没有真正帮助我。我希望你能帮助我。提前谢谢

主要活动:

public class MainActivity extends AppCompatActivity {

    String identifiant=null;
    BottomBar bottombar;
    ProgressBar progressBar;
    ImageButton imageButton;
    TextView nomson;
    RelativeLayout aaaa;
    FragmentWhizz fragmentWhizz;
    FragmentPlaylist fragmentPlaylist;

    FragmentManager fm;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        autorisation();


        fragmentWhizz = new FragmentWhizz();
        fragmentPlaylist=new FragmentPlaylist();

        Fragment fragment = new FragmentConnexion();
        FragmentManager fm = getFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.replace(R.id.contentFragment, fragment);
        transaction.commit();

        bottombar = (BottomBar) findViewById(bottomBar);

        aaaa = (RelativeLayout) findViewById(R.id.aaaa);


        bottombar.setVisibility(View.INVISIBLE);
        bottombar.setOnTabSelectListener(new OnTabSelectListener() {
            @Override
            public void onTabSelected(@IdRes int tabId) {
                if (tabId == R.id.tab_whiz) {
                    if(identifiant !=null){
                        changementFragment(fragmentWhizz);
                    }
                }
                if (tabId == R.id.tab_playlist) {
                    if(identifiant !=null){
                        changementFragment(fragmentPlaylist);
                    }
                }
                if (tabId == R.id.tab_reveil) {
                    if(identifiant !=null){
                        changementFragment(new FragmentReveil());
                    }
                }
                if (tabId == R.id.tab_param) {
                    if(identifiant !=null){
                        changementFragment(new FragmentParam());
                    }
                }
            }
        });

    }
    public void changementFragment(final Fragment fragment){
        runOnUiThread(new Runnable() {
            public void run() {
                 fm = getFragmentManager();
                 FragmentTransaction ft =fm.beginTransaction();
                 ft.setCustomAnimations(android.R.animator.fade_in,android.R.animator.fade_out);
                 ft.replace(R.id.contentFragment, fragment).commit();
            }
        });
    }
}
具有ViewPager的两个片段之一:

public class FragmentPlaylist extends Fragment {

    SlideToutesPlaylist fragmentAllPlaylist = new SlideToutesPlaylist();
    SlideUserPlaylist fragmentUserPlaylist = new SlideUserPlaylist();
    ViewPager mViewPager;
    FloatingActionButton floatbutton;
    private FragmentActivity myContext;

    @Override
    public void onAttach(Activity activity) {
        myContext=(FragmentActivity) activity;
        super.onAttach(activity);
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View myView = inflater.inflate(R.layout.playlist, container, false);
        DeplacerBoutton deplacer = new DeplacerBoutton(getActivity(),2);
        floatbutton = (FloatingActionButton) myView.findViewById(R.id.floatingActionButton);
        floatbutton.setOnTouchListener(deplacer);
        mViewPager = (ViewPager) myView.findViewById(R.id.slide);
        mViewPager.setAdapter(new SamplePagerAdapter(myContext.getSupportFragmentManager()));
        Log.i("test","test");
        return myView;
    }


    public class SamplePagerAdapter extends FragmentStatePagerAdapter {

        SamplePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public android.support.v4.app.Fragment getItem(int position) {
            /** Show a Fragment based on the position of the current screen */
            if (position == 0) {
                return fragmentAllPlaylist;
            } else
                return fragmentUserPlaylist;
        }

        @Override
        public int getCount() {
            // Show 2 total pages.
            return 2;
        }
    }
}
最后一个片段显示在viewPager上:

public class SlideToutesPlaylist extends Fragment {


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View myView = inflater.inflate(R.layout.playlistall, container, false);
        AffichePlaylist(myView);
        return myView;
    }

    public void AffichePlaylist(View myView){
        ExecHttpGetRequest requete = new ExecHttpGetRequest();
        requete.execute("an IP");
        LinearLayout aaa = (LinearLayout) myView.findViewById(R.id.aaa);

        try {
            if (requete.get() != null) {
                JSONObject jsonObj = new JSONObject(requete.get());
                JSONArray jSon = jsonObj.getJSONArray("valeurs");
                for (int i = 0; i < jSon.length(); i++) {
                    JSONObject c = jSon.getJSONObject(i);
                    final String nom_playlist = c.getString("nom_playlist");
                    final String id_playlist = c.getString("id_playlist");
                    final String id_createur = c.getString("id_createur");
                    final String nb_vote = c.getString("nb_vote");
                    Button bouton = new Button(getContext());
                    bouton.setText(nom_playlist);
                    aaa.addView(bouton);

                }
            }
        } catch (InterruptedException | ExecutionException | JSONException e) {
            e.printStackTrace();
        }


    }
}
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

...

viewPager = (ViewPager) view.findViewById(R.id.viewpager);
adapter = new ViewPagerAdapter(getChildFragmentManager());
adapter.addFragment(SlideToutesPlaylist.newInstance(), getString(R.string.title));
adapter.addFragment(SlideToutesPlaylist.newInstance(), getString(R.string.title));
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(2);

要在另一个片段中膨胀片段,需要使用getChildFragmentManager()而不是 myContext.getSupportFragmentManager()

编辑:

按如下方式使用FragmentStatePagerAdapter:

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

import java.util.ArrayList;
import java.util.List;

public class ViewPagerAdapter extends FragmentStatePagerAdapter {

private List<Fragment> mFragmentList = new ArrayList<>();
private List<String> mFragmentTitleList = new ArrayList<>();


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

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

//Check if the list is empty before return the size 
@Override
public int getCount() {
    return mFragmentList != null ? mFragmentList.size() : 0;
}


public void addFragment(Fragment fragment, String title) {
    mFragmentList.add(fragment);
    mFragmentTitleList.add(title);
}

public void addFragment(Fragment fragment) {
    mFragmentList.add(fragment);
}

@Override
public CharSequence getPageTitle(int position) {
    if (!mFragmentTitleList.isEmpty()) {
        return mFragmentTitleList.get(position);
    }
    return "";
}

}

它告诉我我不能,因为我使用android.support.v4.app.FragmentManager(使用ViewPager),你知道如何修复它吗?请让我知道它是否适用于你,如果适用,请记住将答案标记为正确!是的!我正在测试如何实现它。^^^再次感谢!你需要什么,就问吧;)适配器=新的ViewPagerAdapter(getChildFragmentManager());这条线还是不行。。。它告诉我ViewPagerAdapter中的“ViewPagerAdapter(android.support.v4.FragmentManager)不能应用于(android.app.FragmentManager)”:你知道吗?
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

...

viewPager = (ViewPager) view.findViewById(R.id.viewpager);
adapter = new ViewPagerAdapter(getChildFragmentManager());
adapter.addFragment(SlideToutesPlaylist.newInstance(), getString(R.string.title));
adapter.addFragment(SlideToutesPlaylist.newInstance(), getString(R.string.title));
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(2);