簡體   English   中英

如何將數據從一個活動發送到另一個活動的特定片段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM