2016-07-01 69 views
-1

我有2活動: Activity1(MainActivity)和Activity2。數據不會自動重新加載ViewPager中的片段

Activity1有3個片段: Fragment_1,Fragment_2和Fragment_3。

我想根據在Activity2上執行的操作更改Fragment_3的數據。

我的問題是,我從Fragment_2調用Activity2並在那裏做一些事情(在Activity2中),並且回擊到Fragment_2和View Fragmnet_3,Fragment_3的數據沒有變化(Fragment_3的數據應該根據執行的操作進行更改在Activity2上)。

但是,當我選擇Fragment_1,然後選擇Fragment_3時,它的數據根據​​Activity_2上的操作而改變。

我想我從Fragment_2調用Activity2並在那裏做一些事情(在Activity2中)並回到Fragment_2和View Fragmnet_3,數據將會改變。

如何做到這一點?

+0

對不起有人編輯我的問題,我按錯了按鈕 – abcd1234

+1

「但是,當我選擇Fragment_1然後選擇Fragment_3,其數據根據Activity_2上的操作而改變。「這是'ViewPager'的運作方式。它在記憶中保留了2個片段,一個在前,一個在下。有關更多信息,請參閱[Android ViewPager:在ViewPager中更新屏幕外但緩存的片段](http://stackoverflow.com/questions/23133912/android-viewpager-update-off-screen-but-cached-fragments-in-viewpager)信息。 – Sufian

+0

同意@Sufian .. **你不能強制任何片段自動刷新** .... !! –

回答

0

在你的片段中添加這個方法當你的片段在屏幕上可見時總是調用這個方法。

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
     if(isVisibleToUser) 
         { 
         //your changes here 
         } 

} 
+0

「//你的更改在這裏」是Fragment_3重新加載? – abcd1234

0

我做到了!使用BroadCastRecevier!

frament3:

public class MyFragment3 extends Fragment { 
String key; 
private TextView tv; 


@Override 
public void onResume() { 
    //register LocalBroadCastReceiver 
    LocalBroadcastManager lm = LocalBroadcastManager.getInstance(getContext()); 
    MyReceiver receiver = new MyReceiver(); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction("com.action.sodemo"); 
    lm.registerReceiver(receiver,filter); 

    super.onResume(); 

} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_item3,container,false); 
    tv = (TextView) view.findViewById(R.id.tv_3); 

    return view; 
} 

class MyReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     key = intent.getStringExtra("value"); 
     tv.setText(key); 


    } 
} 

}

活性2:

public class Activity_2 extends AppCompatActivity { 
private LocalBroadcastManager lm; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_activity_2); 
    lm=LocalBroadcastManager.getInstance(this); 

    Button btn = (Button) findViewById(R.id.btn_choose); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //send value to fragment3 
      Intent intent = new Intent("com.action.sodemo"); 
      intent.putExtra("value","change"); 
      lm.sendBroadcast(intent); 
     } 
    }); 

} 

}

相關問題