2016-11-10 14 views
0

アクティビティから別のアクティビティの特定のフラグメントに文字列データを送信したいとします。私の場合は、データを送信し、AddNew.classという名前のビューページに2つのフラグメントを持つアクティビティを復活させるためのMainAcitivityという名前のアクティビティがあります。 AddExpenseと2番目のAddLedgerという名前のフラグメント。今私はAddLedgerの断片からではなく、AddExpenseの断片からデータを受け取りたい。どうやってやるの。私は、ボタンをクリックすることで、このコードでデータを送信しました 、アクティビティから別のアクティビティの特定のフラグメントにデータを送信する方法

MainActivity受け

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) { 

      } 
     }); 
    } 

私はデータのみを復活させたいからフラグメントが、私はしました2つのフラグメントは他からデータを受信したくない。 受信フラグメント:AddNewのacitivtyはトーストを作成し

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; 
      } 

上記のコードでは問題は、どちらかを示しAddExpenseFragmentが選択されたかどうかが、私はこれを望んでいません。私は受信したい断片からデータのみを受信したい。この問題をうまく解決してください。

+0

インターフェイスで行うことができます。 – HaroldSer

+0

共有設定を使用する!!断片の流れを制御するための頭痛はない。 – Radhey

+0

ベストソリューションはEVENT BUSを実装することです。それによって、フラグメントとアクティビティの間でデータがやり取りされる自由が得られます。 –

答えて

0

あなたAddExpenseFragmentでsetUserVisibleHintメソッドをオーバーライドし、その中にあなたの受信意思コードを置く必要があります

あなたが意図データをrecieves AddNewのクラスのメソッドを作成し、その断片からのデータでこのメソッドを呼び出すことができます
+0

このコードでオーバーライドしましたが、アプリがクラッシュしました。@Override public void setUserVisibleHint(boolean isVisibleToUser){ AddNewアクティビティ=(AddNew)getActivity(); Utility.shortToast(getActivity()、activity.getIntent()。getExtras()。getString( "edit_expense")); super.setUserVisibleHint(isVisibleToUser); } – Zohaib

+0

ここにlogcatを置くことができます –

+0

11-10 11:06:55.588 530-530/com.example.zohaibsiddique.expensecalculator D/fdgh:仮想メソッド 'android.content.Intent com.example.zohaibsiddiqueを呼び出しようとしています。 expensecalculator.AddNew.getIntent() 'ヌルオブジェクト参照の場合 – Zohaib

0

/* Method in AddNew Activity*/ 
    private void yourIntentData() 
    { 
    return yourdata; 
    } 

/* Method in AddExpenseFragment,type cast and call from the above parent class */ 
     ((AddExpenseFragment)getActivity).yourIntentData(); 
0

このコンパイル:あなたはanotにデータを送信どこからあなたの活動やその断片では、今

compile 'org.greenrobot:eventbus:3.0.0' 

を欲求値を送信するために

private EventBus bus=EventBus.getDefault(); 

と使用方法:彼女のフラグメント/活動

bus.post(new Message("EventBus data")); 

は、複雑なデータを渡すためにモデルクラスを作成します。アクティビティを受け入れ、あなたのデータで

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(); 
    } 

yフラグメントがあり、そのまま使用する

​​3210
+0

によって解決しましたか?それはあなたを助けたのですか? –

+0

ありがとうございますがまだ実装されていません – Zohaib

関連する問題