SlidingMenu和ViewPager联合使用,viewPager丢失数据

Will Wang' 2016-04-28 04:41:04


求助大神帮我看看,问题在哪里,
我使用的是SlidingMenu和ViewPager,正如图片上的情况,我第一次访问有viewpager的页面,可以正常显示,第二次再次访问,数据就会丢失,显示为空,这是怎么回事。
先谢谢各位打神了,万分感谢。

源代码如下

主活动的代码如下:
package com.lingzhuo.testslidingmenu02;

import android.app.Activity;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
import com.lingzhuo.testslidingmenu02.fragment.FragmentFun;
import com.lingzhuo.testslidingmenu02.fragment.FragmentGame;
import com.lingzhuo.testslidingmenu02.fragment.FragmentNews;
import com.lingzhuo.testslidingmenu02.fragment.FragmentThing;

import org.w3c.dom.Text;

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

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private SlidingMenu slidingMenu;
private TitleView titleView;
private Button button_top;
private TextView textView_top;
private FragmentManager manager;
private Button button_news,button_game,button_fun,button_thing;
private Fragment fragment_news,fragment_game,fragment_fun,fragment_thing;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
initListener();
initSlidingMenu();
manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.frameLayout_main, fragment_news, "lifecycle");
transaction.commit();
textView_top.setText("新闻");
}

private void initListener() {
button_top.setOnClickListener(this);
}

private void initSlidingMenu() {
slidingMenu=new SlidingMenu(this);
//设置滑动菜单在左边还是右边
slidingMenu.setMode(SlidingMenu.LEFT);
// 设置触摸屏幕的模式
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
slidingMenu.setShadowWidthRes(R.dimen.shadow_width);
// 设置滑动菜单视图的宽度
slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// 设置渐入渐出效果的值
slidingMenu.setFadeDegree(0.35f);
slidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
//为侧滑菜单设置布局
slidingMenu.setMenu(R.layout.layout_slidingmenu_left_);



button_news= (Button) slidingMenu.findViewById(R.id.button_news);
button_news.setOnClickListener(this);

button_game= (Button) slidingMenu.findViewById(R.id.button_game);
button_game.setOnClickListener(this);

button_fun= (Button) slidingMenu.findViewById(R.id.button_fun);
button_fun.setOnClickListener(this);

button_thing= (Button) slidingMenu.findViewById(R.id.button_thing);
button_thing.setOnClickListener(this);


}

private void init() {
titleView= (TitleView) findViewById(R.id.titleView);
textView_top= (TextView) titleView.findViewById(R.id.textView_title);
button_top= (Button) titleView.findViewById(R.id.button_top);

fragment_news=new FragmentNews();
fragment_game=new FragmentGame();
fragment_fun=new FragmentFun();
fragment_thing=new FragmentThing();

}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_top:
slidingMenu.toggle();
break;
case R.id.button_news:
fragment_news=new FragmentNews();
FragmentTransaction transaction_news = manager.beginTransaction();
transaction_news.replace(R.id.frameLayout_main, fragment_news);
transaction_news.commit();
textView_top.setText("新闻");
break;
case R.id.button_game:
fragment_game=new FragmentGame();
FragmentTransaction transaction_game = manager.beginTransaction();
transaction_game.replace(R.id.frameLayout_main, fragment_game);
transaction_game.commit();
textView_top.setText("游戏");
break;
case R.id.button_fun:
fragment_fun=new FragmentFun();
FragmentTransaction transaction_fun = manager.beginTransaction();
transaction_fun.replace(R.id.frameLayout_main, fragment_fun);
transaction_fun.commit();
textView_top.setText("娱乐");
break;
case R.id.button_thing:
fragment_thing=new FragmentThing();
FragmentTransaction transaction_thing = manager.beginTransaction();
transaction_thing.replace(R.id.frameLayout_main, fragment_thing);
transaction_thing.commit();
textView_top.setText("时事");
break;
}
}
}


带有viewPager的fragment代码如下
package com.lingzhuo.testslidingmenu02.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import com.lingzhuo.testslidingmenu02.R;
import com.lingzhuo.testslidingmenu02.adapter.MyPagerAdapter;

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

/**
* Created by Wang on 2016/4/28.
*/
public class FragmentGame extends Fragment {
private List<Fragment> dataList;
private ViewPager viewPager;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
dataList = new ArrayList<>();
View view = inflater.inflate(R.layout.layout_fragment_game, null);
viewPager = (ViewPager) view.findViewById(R.id.viewPager_game);
dataList.add(new FragmentThing());
dataList.add(new FragmentNews());
dataList.add(new FragmentNews());
MyPagerAdapter adapter = new MyPagerAdapter(getFragmentManager(), dataList);
viewPager.setAdapter(adapter);
if (viewPager != null) {
Log.d("FragmentGame", "我被创建了"+dataList.size());
}
Button button1 = (Button) view.findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(0,false);
Log.d("FragmentGame", "点击事件");
}
});
Button button2 = (Button) view.findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(1,false);
Log.d("FragmentGame", "点击事件");
}
});
Button button3 = (Button) view.findViewById(R.id.button3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(2,false);
Log.d("FragmentGame", "点击事件");
}
});
return view;
}
}


主要出问题的代码就是这一部分,不知道是哪里的逻辑有问题,还请大神帮我看一下,万分感谢。

...全文
161 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_26763799 2016-04-29
  • 打赏
  • 举报
回复
用hide和show方法去展示fragment吧,replace会造成这种情况

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧