2016-09-09 7 views
0

私はアクティビティと単純なフラグメントを持っていますが、バンドルを使用してフラグメントにデータを渡そうとしますが、バンドルは常にnullです。 私は何が問題なのか理解できませんか?フラグメントにデータを渡す

これは私のActivityクラス

public class MainActivity extends AppCompatActivity { 

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


     FragmentA fragmentA =new FragmentA(); 
     Bundle bundle=new Bundle(); 
     bundle.putString("name","Ahmed Ezzat"); 
     fragmentA.setArguments(bundle); 
    } 

    public void showFragment(View view) { 

     FragmentA fragmentA=new FragmentA(); 
     FragmentManager manager=getSupportFragmentManager(); 
     FragmentTransaction transaction=manager.beginTransaction(); 
     transaction.add(R.id.dumper,fragmentA,"fragment A"); 
     transaction.commit(); 
    } 
} 

であり、これは私のフラグメントクラス

public class FragmentA extends Fragment { 
TextView textView; 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view= inflater.inflate(R.layout.fragment_a,container,false); 

    textView= (TextView) view.findViewById(R.id.tv_fragment); 


    Bundle bundle = this.getArguments(); 
    String name = bundle.getString("name"); 
    if (name!=null){ 
    textView.setText(name);} 

    return view; 
} 

}

任意のヘルプですか?

+0

上記の 'FragmentA'インスタンスが2つあります。 – Shaishav

答えて

0

setArgumentsは、showFragmentメソッドでは決して呼び出されませんでした。

onCreateメソッドのフラグメントは決して使用されません。

あなたはトランザクションに渡し、その後、フラグメントを構築するときは、フラグメントにデータを渡すことができ、次のコード

public class MainActivity extends AppCompatActivity { 

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

    public void showFragment(View view) { 

     FragmentA fragmentA=new FragmentA(); 
     Bundle bundle=new Bundle(); 
     bundle.putString("name","Ahmed Ezzat"); 
     fragmentA.setArguments(bundle); 

     getSupportFragmentManager() 
      .beginTransaction() 
      .add(R.id.dumper,fragmentA,"fragment A") 
      .commit(); 
    } 
} 
+0

ありがとうございました。 –

0

を使用してみてください。

public class FragmentA extends Fragment { 
TextView textView; 

String message; 

public FragmentA(String message){ 
    this.message = message; 
    } 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
View view= inflater.inflate(R.layout.fragment_a,container,false); 

textView= (TextView) view.findViewById(R.id.tv_fragment); 

textView.setText(message); 

return view; 
} 

そして、それをコンストラクタに渡すだけです。

関連する問題