2016-11-10 1 views
0

활동의 일부 문자열 데이터를 다른 활동의 특정 프래그먼트로 보내려고합니다. 필자는 데이터를 보내고 AddNew.class라는 뷰 페이지에 두 개의 조각이있는 활동을 되살리는 MainAcitivity라는 액티비티를 사용했습니다. AddExpense와 두 번째 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) { 

      } 
     }); 
    } 

난 단지 데이터를 회복 할에서 조각 그러나 나는했습니다 두 조각은 다른 쪽에서 데이터를 받기를 원하지 않습니다. 수신 조각 : 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 방법을 무시하고 그것에서 수신 의도 코드를 삽입해야

당신이 의도 데이터를 받으면에 AddNew 클래스의 메소드를 만든 다음 조각의 데이터로이 메소드를 호출 할 수 있습니다
+0

이 코드로 덮어 쓰지 만 응용 프로그램이 손상되었습니다[email protected] 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() 'null 객체 참조 – 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

컴파일이 :

compile 'org.greenrobot:eventbus:3.0.0' 

지금, 당신은 데이터를 보낼 곳에서의 활동이나 조각에서 anot하기 그녀의 단편/활동

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 그런 다음 단편을 가지고 있습니다.

@Override 
    public void onResume() { 
     super.onResume(); 
     bus.register(this); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     bus.unregister(this); 
    } 
+0

당신이 그것을 구현하여 해결 했어? 너를 도왔다 니? –

+0

아직 구현하지 않았지만 고맙습니다. – Zohaib

관련 문제