Я разработал приложение, в котором у меня есть транзакция фрагмента,
MainActivity
содержит Fragment View
.
MainActivity
имеют три Button
поверх экрана, которые остаются такими же, когда мы переходим этот Activity
к другому Fragment
, только часть MainActivity
Fragment
изменяется, когда мы выходим из трех.
Но, моя проблема в том, что когда я перехожу от этого MainActivity
в Fragment
, когда нажимаю на First-Button
, это нормально, но когда я нажимаю на Second-Button
, результат перезаписывает экран с помощью первого Fragment
к другому Fragment
.
он находится в одном и том же Activity
, поэтому я не могу удалить Fragment
через remove(fr).commit();
Потому что, если я это сделаю, тогда он станет не кликабельным, может быть снят фрагмент, поэтому не будет отвечать на нажатие следующей кнопки.
общий результат. Отображается экран FirstFragment
и NewFragment
, когда я перехожу на NewFragment
, как я удаляю экран FirstFragment
?
В MainActivity
три кнопки имеют следующий код для изменения фрагмента:
Основная деятельность:
public class MasterActivity extends Activity {
ImageView imgOne, imgTwo, imgThree;
Fragment fr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_master);
imgOne = (ImageView) findViewById(R.id.imgOne);
imgTwo = (ImageView) findViewById(R.id.imgTwo);
imgThree = (ImageView) findViewById(R.id.imgThree);
imgOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
fr = new FirstFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.addToBackStack(null);
//fragmentTransaction.remove(fr).commit();
//getFragmentManager().beginTransaction().remove(fr).commit();
fragmentTransaction.commit();
}
});
imgTwo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
fr = new SecondFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.addToBackStack(null);
//fragmentTransaction.remove(fr).commit();
// getFragmentManager().beginTransaction().remove(fr).commit();
fragmentTransaction.commit();
}
});
его xml файл, например:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#000000"
android:gravity="bottom"
android:weightSum="3" >
<ImageView
android:id="@+id/imgOne"
android:layout_width="0dp"
android:layout_height="27dp"
android:layout_gravity="center"
android:layout_weight="1"
android:src="@drawable/img1" />
<ImageView
android:id="@+id/imgTwo"
android:layout_width="0dp"
android:layout_gravity="center"
android:layout_height="27dp"
android:layout_weight="1"
android:src="@drawable/img2"/>
<ImageView
android:id="@+id/imgThree"
android:layout_width="0dp"
android:layout_gravity="center"
android:layout_height="27dp"
android:layout_weight="1"
android:src="@drawable/img3" />
</LinearLayout>
<fragment
android:id="@+id/fragment_place"
android:name="packagename.FirstFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.87"/>
<LinearLayout/>
<LinearLayout/>
Первый фрагмент:
public class FirstFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View r = inflater.inflate(R.layout.first_fratgment, container, false);
return r;
}
}
Второй фрагмент:
public class SecondFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View r = inflater.inflate(R.layout.second_fratgment, container, false);
return r;
}
}
Но при нажатии одной кнопки Fragment
на другую отображается как первый, так и второй экраны Fragment
.
Итак, как его решить и как удалить первый вид при втором щелчке?
Я использовал этот
fragmentTransaction.remove(fr).commit();
и этот
getFragmentManager().beginTransaction().remove(fr).commit();
но он не работает.