2014-12-31 6 views
1

function이 내 모든 사이에 상수 인 function을 갖고 싶습니다. MainActivity에 있습니다. Fragment은 실행중인 기능을 알지 못하기 때문에 데이터를 activeFragment으로 전달하는 방법을 잘 모르겠습니다.안드로이드 - 주요 활동에서로드 된 단편으로 데이터를 보내는 방법

나는 MainActivityinterface 만드는 시도하고 FragmentimplementMainActivity.OnDataPass을 가지고있다. 하지만 MainActivity에서 인터페이스를 시작하는 방법은 확실하지 않습니다. NullPointerException이 계속 나타납니다. 내 주요 활동에서

:

public class Mainactivity extends FragmentActivity{ 
    OnDataPass dataPasser; 
    BroadcastReceiver receiver; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       String str = intent.getStringExtra("data"); 
       dataPasser.onDataPass(str); 
      } 
     }; 
    } 

    public interface OnDataPass { 
     public void onDataPass(String data); 
    } 
} 

내 조각에서

public class Storage extends Fragment implements Mainactivity.OnDataPass{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     mrootview = (ViewGroup) inflater.inflate(R.layout.storage, container, false); 
     return mrootview; 
    } 

    @Override 
    public void onDataPass(String data) { 
     Log.v(TAG, data); 

    } 
} 

나는 심지어 궤도에 오전 또는 조각에 데이터를 전송하는 더 좋은 방법이 있나요? 당신은 꽤 멀리 이미

+0

당신이 데이터를 보내시겠습니까? 프래그먼트를 만들 때'args'를 통해 전달하거나'FragmentManager'를 사용하여 인스턴스를 얻고 네 인터페이스를 사용할 수 있습니다. 여러분의 질문에 핵심 코드 조각이 없다고 느낄 때' onDataPass' – Blundell

+0

@Blundell dataPasser를 동적으로 설정하는 구문을 알고 있습니까? 아니면 저장을 위해 어떻게 설정하겠습니까? – K3NN3TH

답변

2

:

public class Mainactivity extends FragmentActivity{ 
    OnDataPass dataPasser; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //When you create your fragment, keep a reference of it in the dataPasser variable 
     dataPasser = /* your storage fragment class or any other fragment that implements onDataPass*/ 
     ...... 
     receiver = new BroadcastReceiver() { 
       @Override 
       public void onReceive(Context context, Intent intent) { 
        String str = intent.getStringExtra("data"); 
        dataPasser.onDataPass(str); 
       } 
     }; 
    }  


    public interface OnDataPass { 
     public void onDataPass(String data); 
    } 
} 
+0

그것은 어디에서 dataPaser = 나는 혼란 스럽다. 나는 어떤 조각이로드 될지 모른다. 많은 조각 중 하나가 될 수있다. – K3NN3TH

+0

어떤 조각이로드되거나 어떤 조각이 필요한지는 어디서 결정 되는가? – Hespen

+0

프래그먼트가로드 될 때 dataPasser를 설정할 수 있습니다. 'dataPasser = ((Storage) getActivity()); – K3NN3TH