2016-07-05 28 views
1

我使用ViewPager上创建,这是ViewPagerAdapter机器人重置/重载片段数据

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 
int mNumOfTabs; 

    public ViewPagerAdapter(FragmentManager fm, int NumOfTabs) { 
     super(fm); 
     this.mNumOfTabs = NumOfTabs; 
    } 

    @Override 
    public Fragment getItem(int position) { 

     switch (position) { 
      case 0: 
       Fragment1 tab1 = new Fragment1(); 
       return tab1; 
      case 1: 
       Fragment2 tab2 = new Fragment2(); 
       return tab2; 
      case 2: 
       Fragment3 tab3 = new Fragment3(); 
       return tab3; 
      default: 
       return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return mNumOfTabs; 
    } 
} 

这是Activity_1,其保持所有Fragments,并自动显示Fragment_1当打开Activity_1

public class Activity1 extends AppCompatActivity { 

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

    TabLayout tab_layout = (TabLayout) findViewById(R.id.tab_layout); 
    tab_layout.addTab(tab_layout.newTab().setText("Frag1")); 
    tab_layout.addTab(tab_layout.newTab().setText("Frag2")); 
    tab_layout.addTab(tab_layout.newTab().setText("Frag3")); 

    final ViewPager view_pager = (ViewPager) findViewById(R.id.viewpager); 

    final ViewPagerAdapter adapter = new ViewPagerAdapter 
      (getSupportFragmentManager(), tab_layout.getTabCount()); 

    view_pager.setAdapter(adapter); 

    view_pager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tab_layout)); 

    tab_layout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 

     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      view_pager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
     } 
    }); 

} 

每个Fragment可以去Activity_2
Fragment_3保存可在Activity_2上编辑的数据。

我的问题:

当从Activity_2和回Activity_1使用后退按钮编辑数据,在Fragment_3 数据仍然是老,不随编辑的数据从Activity_2改变。
但是,当关闭Activity_1并再次打开时,Fragment_3中的数据发生更改。

我想我需要重新设置或加载Fragment_3当我回来Activity_1Activity_2,但我不知道怎么办。

更新,
这是Activity_2:

public class Activity2 extends AppCompatActivity { 

TextView tv_id; 
String id; 

TextView tv_d; 
Button bt_add, bt_remove; 

String str_find; 

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

    Intent i = getIntent(); 
    id = i.getStringExtra("id"); 

    tv_id = (TextView)findViewById(R.id.tv_DetailId); 

    tv_id.setText(id); 

    tv_d = (TextView)findViewById(R.id.tv_Detail); 
    bt_add = (Button)findViewById(R.id.bt_detail_add); 
    bt_remove = (Button)findViewById(R.id.bt_detail_remove); 

    str_find = "example"; 

    try { 
     final File file = new File(Environment.getExternalStorageDirectory() + "/TestFolder/Test.txt"); 

     StringBuilder text = new StringBuilder(); 
     BufferedReader br = new BufferedReader(new FileReader(file)); 
     String line; 
     while ((line = br.readLine()) != null) { 
      text.append(line); 
      text.append('\n'); 
     } 
     br.close(); 
     xml_root = text.toString(); 

     FileInputStream in = new FileInputStream(file); 
     int len = 0; 
     byte[] data1 = new byte[1024]; 
     while (-1 != (len = in.read(data1))){ 
      if(new String(data1, 0, len).contains(str_find)){ 
       bt_add.setVisibility(View.GONE); 
       tv_d.setText("yes"); 
       bt_remove.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         //something to edit data on Test.txt 
        } 
       }); 
      } 
      else { 
       bt_remove.setVisibility(View.GONE); 
       tv_d.setText("no"); 
       bt_add.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         //something to edit data on Test.txt 
        } 
       }); 
      } 

     } 
    } 
    catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 

}在onResume()方法

+0

使用接口的全局变量的活动或片段和活动之间进行通信。 –

+1

可能的重复.. http://stackoverflow.com/q/38143179/6334037 – user392117

+0

@Mohammed Atif:如何使用它 – 1234abcd

回答

1

你可以有一个条件检查

view_pager.setCurrentItem(last_frag);

其中last_frag是一个全球性的整数,其您每次在第ch页设置的值愤怒的听众。

这会刷新你的片段。

在你Activity1.java

做如下修改

private ViewPager view_pager;将是你的全局变量

和初始化过程中删除final ViewPager

让它像这样在onCreate()方法

view_pager = (ViewPager) findViewById(R.id.viewpager); 

private int last_frag = 0;将在Activity1.java

@Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      view_pager.setCurrentItem(tab.getPosition()); 
      last_frag = tab.getPosition(); 
     } 
+0

我试过了,但是在view_pager.addOnPageChangeListener中,我无法添加view_pager.setCurrentItem(last_frag);代码在setCurrentItem上显示红色。可能是我不明白你的外植物。你能告诉我你用我的代码编辑的东西吗? – 1234abcd

+0

我更新答案,看看。 –

+0

所以,如果我理解的权利,在view_pager.setCurrentItem(last_frag); last_frag是从0到2的整数,定义在发送给Activity_2的每个片段中并在Activity_1中再次获取? – 1234abcd