2016-06-18 9 views
0

フラグメントとアクティビティの間でデータを渡そうとしていますが、できません。エラーや例外は発生しません。私の断片には価値があるという価値観があります。私はインターフェイスを使用しています。Android:フラグメントとアクティビティ間のデータ

HoroscopeのコードChoice Fragment、ボタンを含むフラグメントです。各ボタンには値があります。値を押すたびにアクティビティに渡したい値です。活動の

(...) 
    static OnInfoChangedListener mCallback; 

public HoroscopeChoice() {} 
    /****************************** 
    * Callback 
    ********/ 
    public static void OnInfoChangedListener(OnInfoChangedListener callback) { 
     mCallback = callback; 
    } 
    public interface OnInfoChangedListener { 
     public void onInfoChanged(String horosocopo); 
    } 
public View onCreateView(final LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_horoscope_choice, 
       container, false); 

     Button aquarius; 
     aquarius = (Button) view.findViewById(R.id.aquarius1); 

     final int id = view.getId(); 

     View.OnClickListener onClickListener = new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       String horoscopo = onClick2(v.getId()); 
       Log.d("HoroscopeChoice", "push button->"+horoscopo); 
       mCallback.onInfoChanged(horoscopo); 
      } 
     }; 

     aquarius.setOnClickListener(onClickListener); 

public String onClick2(int id) 
{ 
    String horoscopo=""; 

    if (id == R.id.aquarius1) { 
     horoscopo = "Aquarius"; 
    } 
} 
(...) 

コード:

(...) 
public void onInfoChanged(String horoscopo) { 
     Log.d("SchedulerActivity","OnInfoChanged na Scheduler->"+horoscope); 

     mHoroscopeDisplay = (TextView) findViewById(R.id.dailyHoroscope4); 
     mHoroscopeDisplay.setText(horoscopo); 
    } 

私は断片でLog.dを行うと、私は価値がない活動で、値を取得します。誰が何が間違っているか知っていますか?

+0

1. 'mCallback'はどのように設定されていますか? 2.問題は 'onClick2()'メソッドの中にあるかもしれません。そこには何がありますか? – Karakuri

+0

@Karakuri私はここにそれを置くことを忘れてしまったが、追加した。私がコード上にあるLog.d()を印刷すると、Fragmentでは有効な値が得られますが、アクティビティには何も表示されません。 – porthfind

+0

'mCallback'がどこに割り当てられているのかを追加していません。 _declared_を追加しただけです。私は 'mCallback = {something}' – Karakuri

答えて

0

これはインターフェイスのコールバックを介して行うことができますが、この種のものに最適なEventBusという偉大なサードパーティのライブラリではさらに簡単な方法があります。 オブジェクトをある場所から別の場所に送ることができます。

イベントを送信し、必要な場合はいつでもリスナメソッドを作成するだけです。彼らのガイドに従ってください、それは非常に簡単です。

0

静的なリスナーオブジェクトを使用しないでください。特にActivityのようなものを格納することは避けてください。代わりに、リスナーをインスタンス変数にする必要があります。フラグメントとアクティビティー間のインターフェース通信を使用するための標準的なパターンは、onAttach()を使用します。

private OnInfoChangedListener mCallback; 

@Override 
public void onAttach(Activity activity) { 
    if (!(activity instanceof OnInfoChangedListener)) { 
     throw new IllegalStateException("Activity must implement OnInfoChangedListener!"); 
    } 
    mCallback = (OnInfoChangedListener) activity; 
} 

@Override 
public void onDetach() { 
    mCallback = null; 
} 
+0

あなたの変更を加えた後、私はまだ活動の価値を得ていません。問題はアクティビティにあると思うが、私はどこにいるのか分からない。 – porthfind

+0

@porthfindあなたのポストにコードを追加する必要があるかもしれません – Karakuri

関連する問題