2014-10-13 1 views
0

하나의 MainActivity와 두 개의 조각 인 Input.java와 Output.java가 있습니다. Input fragment에서 output_layout에있는 textview에 액세스하려고합니다. (정확하게는 input_layout의 버튼을 클릭하면 output_layout의 텍스트 뷰가 변경되어야합니다.) 내가 어떻게 할 수 있니? main_activity에서이 input_layout 및 out_put 레이아웃을 동적으로 호출합니다.다른 레이아웃보기 액세스

초심자 인 것처럼, 나의 무지를 용서해주십시오. 귀하의 도움을 매우 높이 평가 될 것입니다. 미리 감사드립니다.

+1

을 당신이 [여기]를 이동해야 생각 (HTTPS ://www.google.co.in/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=communication%20between%20fragments%20in%20android). – Gunaseelan

+0

@AlexK 예. 의사 소통은 하나에서 다른 조각으로 데이터를 전송하기 위해서만 언급됩니까? – ajay

+1

@ajay : Fragment to Fragment 의사 소통의 철학을 채택하지 마십시오. 'Fragment'는 모듈 식, 자체 포함 및 재사용 가능해야합니다. 어떤 시점에서'Fragment'는 다른'Fragment'의 존재를 결코 알 수 없습니다. 하나의 '단편'에서 다른 단편으로의 모든 의사 소통은 '활동'을 통해 이루어져야합니다. – Squonk

답변

1

시도 이용 인터페이스의 값을 설정하려는 다른 단편에 액세스 할 수있다. 예를 들면. Input.class의 onAttach 방법에

public interface OnOutputFragmentTextChanger { 
     public void onChangeText(String what); 
    } 

다음을 수행하십시오

@Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mCallback = (OnOutputFragmentTextChanger) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement OnOutputFragmentTextChanger"); 
     } 
    } 

그리고 당신에 mCallback.onChangeText ("Foooo")를 호출 OnClickListener를; 방법 만들고 다음 출력 클래스에

public void updateInputView(String what) 
{ 
    mTextView.setText(what); 
} 

다음 방법 onChangeText (문자열 무엇을) 활동에 OnOutputFragmentTextChanger를 구현하고 재정의 :

public class MainActivity extends FragmentActivity implements OnOutputFragmentTextChanger 
    { 
    //do somwthing 

     @Override 
     public void onChangeText(String what) 
     { 
      InputFragment inputfragment = (InputFragment) 
      getSupportFragmentManager().findFragmentById(R.id.fragment); // or try    findFragmentByTag 

      if (inputfragment != null) 
       { 
        inputfragment.updateInputView("some string"); 
       } 
     } 
    } 
+0

대단히 감사합니다 – ajay

+0

그것은 나의 기쁨입니다 :) – Slampy

-1

은 해당 단편의 공용 정적으로 입력 레이아웃의 텍스트 뷰를 선언하고 직접가 온 클릭 버튼

+0

내가 Output.java에서 public static으로 textview를 선언했다면, (TextView) view.findViewById (R.id.output_textview)) .setTexe ("answer")에 액세스 할 수 있다고 가정합니다. 권리?? – ajay

+0

'Fragment' 또는'Activity'에'public static' 변수 나 메소드를 선언하지 마십시오. 이것들은'public static'이 문제를 일으킬 수있는 두 클래스입니다. – Squonk

+0

@ 스퀘크 그렇다면 어떻게해야합니까? – ajay