Fragmanlar kullanarak bir Master/Ayrıntı akışına sahip bir uygulama oluşturmaya çalışıyorum. Bir öğeyi seçmek, daha sonra başka bir parçayı "açmak" ve onu arka yığına eklemek için bir detay parçasını açacaktır.Master/Ayrıntı Akışında Fragmanları Değiştirme
Yaptıklarını göstermek için sınıfları yeniden adlandırdım.
public class ListOfDetails extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
//Callback method indicating that an item with the given ID was selected.
public void onItemSelected(String id) {
// Performing logic to determine what fragment to start omitted
if (ifTwoPanes()) {
Fragment fragment = new DetailFragmentType1();
getSupportFragmentManager().beginTransaction().replace(R.id.aContainer, fragment).commit();
} else {
Intent newIntent = new Intent(this, SinglePaneFragmentWrapper.class);
newIntent.putExtra("id", id);
startActivity(newIntent);
}
}
// My attempt at making it possible to change displayed fragment from within fragments
public void changeDetailFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.addToBackStack(null);
transaction.replace(R.id.aContainer, fragment);
transaction.commit();
}
}
Detay parçalarından bir tanesi. Farklı koşullarda oluşturulabilecek birçok farklı Fragman var.
public class DetailFragmentType1 extends Fragment {
private ListOfDetails parent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Activity a = getActivity();
if (a instanceof ListOfDetails) {
parent = (ListOfDetails) a;
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Button aButton = (Button) getActivity().findViewById(R.id.aButton);
aButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
parent.changeDetailFragment(new SubDetailFragment());
}
});
}
}
telefonda
, bir sarıcı aktivite parçasınıpublic class SinglePaneFragmentWrapper extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Duplicate logic must be performed to start fragment
// Performing logic to determine what fragment to start omitted
String id = getIntent().getStringExtra("id");
if(id == "DetailFragmentType1") {
Fragment fragment = new DetailFragmentType1();
getSupportFragmentManager().beginTransaction().replace(R.id.aContainer, fragment).commit();
} else {
...
}
}
}
bu koşulda ayrıntı bölmesinde açık olan parçayı değiştirmek için uygun yolu nedir tutmak için kullanılır? Yöntemim iki bölme kullanırken bir kesmek gibi hissettiriyor ve tek bir bölmede kullanıldığında bile çalışmıyor. Çünkü TekPaneFragmentWrapper öğesinden getParent()
null dönüyor ve parent.changeDetailFragment()
numaralı telefonu arayamıyorum.
Bu karmaşık bir soru, umarım iyi açıklamıştım. Bir şey özlediysem haber ver. Teşekkürler