2017-01-20 9 views
0

アクティビティA文字列をアクティビティからフラグメントに渡す方法は?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_ActivityA); 

    Bundle b = new Bundle(); 
    b.putString("mobile", "123456789"); 
    FragmentA fragmentA = new FragmentA(); 
    fragmentA .setArguments(b);} 

FragmentA

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.fragment_fragmentA, container, false); 

     String txtMobile = getArguments().getString("mobile"); 
     Log.i("mobile2",txtMobile); 
     mobile.setText(txtMobile);} 

I「はjava.lang.Stringでandroid.os.Bundle.getString(Javaの溶液上に試みたが 試みが仮想メソッドを呼び出すことはエラーを示しています。 nullのオブジェクト参照のlang.String「)

答えて

0

は、それはあなたがクラスにフラグメントを追加する方法についてですである場合があります。

Bundle b = new Bundle(); 
    b.putString("mobile", "123456789"); 
    FragmentA fragmentA = new FragmentA(); 
    fragmentA .setArguments(b); 

    fm.beginTransaction() 
    .replace(placeholder, new FragmentA(), tabId) 
    .commit(); 

は、あなたがそれを追加した方法についてのより多くのデータを提供することができますか?あなたは合格する

public interface FragmentRefreshListener { 
    void onRefresh(String mydata); 
} 

public FragmentRefreshListener fragmentRefreshListener; 

public void setFragmentRefreshListener(FragmentRefreshListener fragmentRefreshListener) { 
    this.fragmentRefreshListener = fragmentRefreshListener; 
} 

public FragmentRefreshListener getFragmentRefreshListener() { 
    return fragmentRefreshListener; 
} 

は、その後、あなたのフラグメント内の自分の活動に次のコードの下に

((MainActivity) getActivity()).setFragmentRefreshListener(new MainActivity.FragmentRefreshListener() { 

     @Override 
     public void onRefresh(String mydata) { 

     // write your logic here 

     } 
    }); 

使用を追加するには、アクティビティで

を断片化する活動からのデータを渡すためにintefaceをを使用することができます

+0

fragmentManager = getChildFragmentManager(); fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.containerView、new FragmentA())。commit(); –

+0

それは問題です:fragmentTransaction.replace(R.id.containerView、fragmentA).commit();フラグメントAの新しいインスタンスの代わりにフラグメントAに気付く、 – challenger

+0

ありがとう。 –

0

この

public static MyFragment newInstance(String string) { 

    Bundle args = new Bundle(); 
    args.putString("string",string); 
    MyFragment fragment = new MyFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 
012のようなあなたのフラグメントを作成します

そして、フラグメントonCreateで、そのストリングを引き出すためにを使用します。 にヌルをチェックすることを忘れないでください。デフォルト値コンストラクタでフラグメントののonCreateメソッドに引数をフェッチする

0

試してみてください。

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    String txtMobile = getArguments().getString("mobile", ""); 
} 

、あなたがフラグメントで引数をsettting後のフラグメントトランザクションをコミットすることを確認してください。 :)

+0

同じエラーが表示される –

+0

フラグメントをコミットしているコードを表示できますか? – Ashish

+0

理解していない...... plsコミットする方法を教えてください –

0

まず、引数がnullでないことを確認します。 例えば @Override パブリックビューonCreateView(LayoutInflater用インフレータ、のViewGroup容器、バンドルsavedInstanceState){

View v = inflater.inflate(R.layout.fragment_fragmentA, container, false); 

IF(getArguments()!= NULL){

String txtMobile = getArguments().getString("mobile"); 
    Log.i("mobile2",txtMobile); 
    mobile.setText(txtMobile); 

} }

+0

エラーを表示していないということはnullを意味します.......次に文字列を取得する方法 –

0

試着:

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     if (savedInstanceState != null){    
      String txtMobile = savedInstanceState.getString("mobile");     
     } 
    } 
0

フラグメントから活性へのデータ

getFragmentRefreshListener().onRefresh("dummy text"); 
関連する問題