Ich versuche, das Fragmentlayout anzupassen, indem ich meine eigene Ansichtshierarchie aus onCreateView(LayoutInflater, ViewGroup, Bundle)
zurückgebe. Dies bläst meine benutzerdefinierte Ansicht auf, scheint aber die Ansichten zu stapeln, anstatt sie in mir aufzublasen. Ich sehe alles auf einmal. Jede Hilfe wird geschätzt.
MyActivity.Java:
public class MyActivity extends FragmentActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getSupportFragmentManager().findFragmentById(Android.R.id.content) == null) {
ArrayListFragment list = new ArrayListFragment();
getSupportFragmentManager().beginTransaction().add(Android.R.id.content, list).commit();
}
}
public static class ArrayListFragment extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
inflater.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.main, container);
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String List[] = {"Larry", "Moe", "Curly"};
setListAdapter(new ArrayAdapter<String>(getActivity(), Android.R.layout.simple_list_item_1, List));
}
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingLeft="8dp"
Android:paddingRight="8dp">
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="THIS IS A BUTTON" />
<ListView
Android:id="@Android:id/list"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#00FF00"
Android:layout_weight="1"
Android:drawSelectorOnTop="false" />
<TextView
Android:id="@Android:id/empty"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#FF0000"
Android:text="No data" />
</LinearLayout>
Ich habe die neue Ansicht nicht innerhalb der onCreateView-Methode der ListFragment-Klasse zurückgegeben. Zum Beispiel:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main, null);
return view;
}
Alles funktioniert jetzt gut im Land von Android!
optimierter Weg und Schusscode
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.list_alphabet, container, false);
}
Ich denke, du solltest es besser machen
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.main, container, false);
return root;
}
getSupportFragmentManager().beginTransaction().add(Android.R.id.content, list).commit();
Liste wird nicht akzeptiert, es wird nach einem Fragment gesucht.
benutze dieses Muster, funktioniert perfekt!
inflater.inflate(R.layout.list_layout, container, false);
public View inflate (XmlPullParser-Parser, ViewGroup-Stamm, Boolean attachToRoot)
attachToRoot Soll die aufgeblasene Hierarchie an den root-Parameter angehängt werden? Wenn false, wird root nur verwendet, um die richtige Unterklasse von LayoutParams für die Stammansicht im XML zu erstellen.