フラグメントに問題があります。 > Fragment1では、私が呼んFragment2フラグメント内のテキストボタンを別のフラグメントから設定するには
が - - 。私はボタンにクリックすると> Fragment2では、Fragment1で、ボタンのテキストが変更されます(I私の活動に
私はFragment1
呼び出しますこれは私のソースコードである)
これを行う方法がわからない:
activity_main.xml
<Button
android:id="@+id/btnFragment1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Call Fragment 1" />
<LinearLayout
android:id="@+id/lnFragment1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"></LinearLayout>
fragment1.xml:
<Button
android:id="@+id/btnFragment2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Call Fragment 2" />
<LinearLayout
android:id="@+id/lnFragment2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"></LinearLayout>
fragment2.xml:
<Button
android:id="@+id/btnChange"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:text="Change text for button in fragment 1 to 'DONE'" />
<LinearLayout
android:id="@+id/lnFragment2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"></LinearLayout>
MainActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnFragment1 = (Button) findViewById(R.id.btnFragment1);
btnFragment1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment fragment = new Fragment1();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); //lay fragmenttransaction thong qua fragment manager
fragmentTransaction.replace(R.id.lnFragment1,fragment);
fragmentTransaction.commit();
}
});
}
Fragment1.java:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1,container,false);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
Button btnFragment2 = (Button) getView().findViewById(R.id.btnFragment2);
btnFragment2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment fragment = new Fragment2();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); //lay fragmenttransaction thong qua fragment manager
fragmentTransaction.replace(R.id.lnFragment2,fragment);
fragmentTransaction.commit();
}
});
}
Fragment2.java。
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment2,container,false);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
final Button btnChange = (Button) getView().findViewById(R.id.btnChange);
btnChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment fragment1 = new Fragment1();
View vFragment1 = fragment1.getView();
Button btnChange = (Button) vFragment1.findViewById(R.id.btnChange);
btnChange.setText("Done");
}
});
}
ありがとうございます!
2つのフラグメントは直接通信する必要はありません、フラグメント1に活動、フラグメント2への活動を通信するインターフェイスを使用してください。 – HaroldSer
あなたは必要です1つのフラグメントを別のフラグメントと通信するには、1つのアクティビティを使用します。 –