0

で新しいプロジェクトを作成しました。Androidスタジオ2.2.2のナビゲーションドロワーアクティビティテンプレート。私はFrameLayoutを使用することに決めました。ナビゲーションメニュー項目をクリックすると、新しいフラグメントが読み込まれます。私content_main.xmlアクティビティのフラグメントからのAndroidのボタンテキスト

は、私はこのようなでframeLayout要素を持っている:

コンテンツが表示されますフレームがある
<FrameLayout 
    android:id="@+id/content_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</FrameLayout> 

その後、私はレイアウトfragment_one.xmlとそのクラスFragmentOneを持っており、彼らは次のようになります。

fragment_one.xml

<Button 
    android:text="Default Button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/mybutton" /> 

FragmentOneクラス

私はエラーを取得

ここ
FragmentManager fm = getSupportFragmentManager(); 
    fm.beginTransaction().replace(R.id.content_frame, new FragmentOne()).commit(); 

    FragmentOne fragment_obj = (FragmentOne)getSupportFragmentManager(). 
      findFragmentById(R.id.frOne); 
    fragment_obj.changeBtnText("Changed text"); 

::私は主からの断片のボタンのテキストを変更するにはどうすればよい

Attempt to invoke virtual method 'void com.example.user.myapplication.FragmentOne.changeBtnText(java.lang.String)' on a null object reference

私は、コードを持っているMainActivityさんのonCreate()メソッドで10

public class FragmentOne extends Fragment { 

    Button btn; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_one, container, false); 
     btn = (Button) view.findViewById(R.id.mybutton); 
     return view; 
    } 

    public void changeBtnText(String txt) 
    { 
     btn.setText(txt); 
    } 
} 

changeBtnText(String txt)メソッドを使用したアクティビティ?

答えて

0

アクティビティにないフラグメント内のchangeBtnText(String txt)を呼び出します。

EDIT:活動中

FragmentOne.class内部

public FragmentOne newInstance(String text) { 
    FragmentOne fragmentOne = new FragmentOne(); 

    Bundle args = new Bundle(); 
    args.putInt("text", text); 
    fragmentOne .setArguments(args); 

    return fragmentOne ; 
} 

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_one, container, false); 
    btn = (Button) view.findViewById(R.id.mybutton); 

    String text = getArguments().getString("text", null); 
    changeBtnText(text); 

    return view; 
} 

FragmentManager fm = getSupportFragmentManager(); 
    fm.beginTransaction().replace(R.id.content_frame, FragmentOne.newInstance("text")).commit(); 
+0

タイトルで言うように、私はActivityで呼びたいと思っています。 – Hawkridge

+0

URの質問にテキストを何時に表示するか明確に定義する必要があります。私はあなたがクリックされたnav項目に従ってテキストを変更したいと思った。私はそれに応じて私の答えを編集しました。 – uguboz

+0

タイトルには、「アクティビティのFragmentからボタンテキストを設定する」と表示されます。しかし、コード内で何をしているのかは、アクティビティ – uguboz

0

あなたはそれがnullだ理由ですFragmentを作成していません。新しい行を一列に作成しますが、保存しないでください。

これを試してください。

FragmentOne fragment_obj = new FragmentOne(); 
FragmentManager fm = getSupportFragmentManager(); 
    fm.beginTransaction().replace(R.id.content_frame, fragmentOne).commit(); 

fragment_obj.changeBtnText("Changed text"); 
+0

ありがとう、動作していない、すでに試してみました.. – Hawkridge

関連する問題