2016-06-18 4 views
0

조각과 활동간에 데이터를 전달하려고하는데 할 수 없습니다. 오류나 예외는 없습니다. 내 조각에 가치와 가치가있는 활동과 활동이 있습니다. 인터페이스를 사용하고 있습니다.Android : 조각과 활동 사이의 데이터

HoroscopeChoiceFragment (코드 조각) 버튼이있는 조각입니다. 각 버튼에는 내가 값을 매번 누를 때마다 액티비티에 전달하려는 값이 있습니다. 코드 활동의

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

: 나는 내가 값을 얻을 조각에 Log.d 작업을 수행 할 때

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

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

, 활동에 나는 아무 가치가 없습니다. 누가 잘못되었는지 아는 사람 있습니까?

+0

1.'mCallback'은 어떻게 설정됩니까? 2. 문제는'onClick2()'메소드 내부에있을 수 있습니다. 안에 뭐가 들어 있니? – Karakuri

+0

@ Karakuri 여기에 넣는 것을 잊어 버렸지만 추가했습니다. 코드에있는 Log.d()를 인쇄 할 때 조각 (Fragment)에 유효한 값이 있지만 작업 (No)에 아무 것도 표시되지 않습니다. – porthfind

+0

'mCallback'이 _assigned_에 추가되지 않았습니다. _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

관련 문제