コンテンツ削除ページを取得し、削除されます場合は(誰かがより多くの情報を必要とする、またはより良い説明を私に知らせた場合)Viewpager:ページが次のページのコンテンツは
こんにちは、私はここからviewPagerLibraryを含ま:http://viewpagerindicator.com/#introduction今日で私のプロジェクト。
いいえ、私は本当に奇妙な問題を抱えています: 私はサイトやページを追加して(それを次の数行でサイトに呼びましょう)、もう一度削除しても問題ありません。しかし、別のページを追加しようとすると(それらのページはBaseFragmentクラスを実装する異なるフラグメントです)、最初のページの内容が表示されます。 私はいくつかのページを追加し、それらのページの中に1つを削除すると同じことが起こります。削除されたページの後にあるページに、削除されたページのコンテンツが表示されます。
このバグの例: 問題は現在です。そのFragmentBの後にFragmentAを追加すると、FragmentAを削除し、FragmentBはFragmentAのビュー/コンテンツを取得します。奇妙なことは、オブジェクトが正しいものだからです(アダプタが正しいオブジェクトを返します)。タイトルも正しいものです。私のメインで
私はこの方法で私のポケットベル、インジケータやアダプタを作成します。
Cfg.mAdapter = new FragmentAdapter(getSupportFragmentManager());
Cfg.mPager = (ViewPager)findViewById(R.id.pager);
Cfg.mPager.setAdapter(Cfg.mAdapter);
Cfg.mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
Cfg.mIndicator.setViewPager(Cfg.mPager);
//We set this on the indicator, NOT the pager
Cfg.mIndicator.setOnPageChangeListener(TabHelper.onPageChangeListener);
(CFGは、使用のためそれらのものを格納するための静的なファイルである)
私BaseFragmentは次のようになります。 :フラグメントの
public class BaseFragment extends Fragment{
public static int FILE_FRAGMENT = 0;
public static int FTP_FRAGMENT = 1;
public static int ADDFTP_FRAGMENT = 2;
public static int PREVIEW_FRAGMENT = 3;
public static int CSS_FRAGMENT = 4;
public static int BOOKS_FRAGMENT = 5;
public static int SNIPPETS_FRAGMENT = 6;
//private int id;
private int typ;
private String title;
public int getTyp() {
return typ;
}
public void setTyp(int typ) {
this.typ = typ;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
一つは、(私は他のフラグメントは違いはありませんと思います)、次のようになります
public class FtpFragment extends BaseFragment {
private static RowLayout rowLayout_view;
public FtpFragment() {
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
init_data();
}
public static void init_data()
{
//Remove child for update
rowLayout_view.removeAllViews();
List<FtpData> ftps = FtpStorage.getInstance().getFtps();
if (ftps != null) {
for (FtpData f : ftps) {
View inflatedView;
inflatedView = View.inflate(Cfg.ctx, R.layout.ftp, null);
inflatedView.setOnClickListener(button_ftp_listener);
inflatedView.setOnLongClickListener(button_ftp_longClickListener);
inflatedView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, Converter.convertFromDPtoPixel(160.0f)));
inflatedView.setTag(f);
inflatedView.findViewById(R.id.book_imageview).setBackgroundDrawable(
Cfg.ctx.getResources().getDrawable(R.drawable.nopreview));
((TextView) inflatedView.findViewById(R.id.book_textview)).setText(f.nickname);
rowLayout_view.addView(inflatedView);
}
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_ftp, container, false);
rowLayout_view = (RowLayout) v.findViewById(R.id.rowLayout_ftps);
return v;
}
@Override
public String getTitle() {
return "FTPs";
}
@Override
public int getTyp() {
return BaseFragment.FTP_FRAGMENT;
}
@Override
public void setTyp(int typ) {
super.setTyp(typ);
}
}
ページを削除または追加するには、私はこれを呼び出す:
public static void addNewTab(BaseFragment fragment)
{
Cfg.mAdapter.addItem(fragment);
Cfg.mPager.setCurrentItem(Cfg.mAdapter.getCount());
Cfg.mIndicator.notifyDataSetChanged();
}
public static void deleteActTab()
{
Cfg.mAdapter.removeItem(Cfg.mAdapter.getActPage());
Cfg.mIndicator.notifyDataSetChanged();
}
そして、それはアダプタです:
public class FragmentAdapter extends FragmentPagerAdapter implements TitleProvider{
public List<BaseFragment> fragments = new LinkedList<BaseFragment>();
private int actPage;
public FragmentAdapter(FragmentManager fm) {
super(fm);
}
public void setActPage(int actPage) {
Lg.d("setActPage: " + actPage + " : " + fragments.get(actPage).toString());
this.actPage = actPage;
}
public void addItem(BaseFragment fragment)
{
Lg.d("addItem: " + fragment.toString());
fragments.add(fragment);
}
public void removeItem(int index)
{
if(index < getCount()){
Lg.d("RemoveItem: " + index + " : " + fragments.get(index).toString());
fragments.remove(index);
}
}
public BaseFragment getActFragment()
{
return getItem(getActPage());
}
public int getActPage() {
return actPage;
}
@Override
public BaseFragment getItem(int position) {
if(position < getCount())
{
Lg.v("getItem: " + fragments.get(position));
return fragments.get(position);
}
else
return null;
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public String getTitle(int position) {
Lg.v("Get Title: " + fragments.get(position).getTitle());
return fragments.get(position).getTitle();
}
}
うん、私は、誰かが私を助けることができると思います。
私は何かを忘れてしまった場合。事前に
おかげで、(mikepenzによって)あなたの答えで マイク
ここに問題の言及に関する提案があります。http://stackoverflow.com/q/25159181/2624806 – CoDe