[英]How to send data from an activity to another activity's specific fragment
我想將一些字符串數據從一個活動發送到另一個活動的特定片段。 就我而言,我有一個名為MainAcitivity的活動,用於發送數據和恢復活動,該活動在viewpager中有兩個名為AddNew.class的片段。 一個片段名為AddExpense,第二個片段稱為AddLedger。 現在我只想從AddExpense片段接收數據,而不是從AddLedger片段接收數據。 我怎樣才能做到這一點。 通過單擊按鈕,我已通過此代碼發送數據,
主要活動
Intent intent = new Intent(MainActivity.this, AddNew.class);
intent.putExtra("edit_expense", "zohaib");
startActivity(intent);
接收活動:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_new);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if(actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Add Expense"));
tabLayout.addTab(tabLayout.newTab().setText("Add Ledger"));
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager2);
final TabAdapter adapter = new TabAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener (new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
我只想從中恢復數據的片段,但是我有兩個片段,所以不想從其他人那里接收數據。 接收片段:
public class AddExpenseFragment extends Fragment implements AdapterView.OnItemSelectedListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.add_expense, container, false);
AddNew activity = (AddNew) getActivity();
Utility.shortToast(getActivity(), activity.getIntent().getExtras().getString("edit_expense"));
return view;
}
上面的代碼中的問題,當AddNew acitivty創建Toast時,顯示是否選擇了AddExpenseFragment,但我不希望這樣做。 我只想從我要從中接收的那個片段中接收數據。 請解決此問題。
您應該在AddExpenseFragment中重寫setUserVisibleHint
方法,並將接收意圖代碼放入其中
您可以在AddNew類中創建一個接收意圖數據的方法,然后使用片段中的數據調用此方法
/* Method in AddNew Activity*/
private void yourIntentData()
{
return yourdata;
}
/* Method in AddExpenseFragment,type cast and call from the above parent class */
((AddExpenseFragment)getActivity).yourIntentData();
編譯:
compile 'org.greenrobot:eventbus:3.0.0'
現在,在您將數據發送到另一個片段/活動的位置的活動或片段中:
private EventBus bus=EventBus.getDefault();
並使用發送期望值的方法:
bus.post(new Message("EventBus data"));
創建Model類以傳遞復雜數據:
public class Message{
private final String message;
.....SET MORE VARIABLES AS PER YOUR NEED....
public Message(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
在您的數據接受活動中:
EventBus bus=EventBus.getDefault();
.....THIS METHOD IS GETTING DATA......
@Subscribe
public void onLoginEvent(Message event){
Toast.makeText(getBaseContext(),event.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onStart() {
super.onStart();
bus.register(this);
}
@Override
public void onStop() {
bus.unregister(this);
super.onStop();
}
如果你有片段,那就用
@Override
public void onResume() {
super.onResume();
bus.register(this);
}
@Override
public void onPause() {
super.onPause();
bus.unregister(this);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.