Ich habe noch nie ein Fragment gemacht und habe versucht, dies zum Laufen zu bringen. Ich habe einige Online-Tutorials verfolgt, aber diese haben nicht viel gebracht.Wie mache ich ein Fragment?
Mein Problem ist, dass die Methoden aufgerufen werden außer Betrieb. Wenn die XML-Datei von MyActivity geladen wird, wird auch das Fragment geladen und die onCreate() -Methode aufgerufen. Dies geschieht, bevor ich die Methode newInstance() des Fragments aufgerufen habe, damit onCreate() nicht über die Parameter verfügt, die es benötigt, um zu funktionieren.
Wie können Parameter an das Fragment übergeben werden? Weil das offensichtlich nicht funktioniert. Ich habe versucht, den Code zu vereinfachen, was genau relevant ist.
Incase wollen Sie es, das die spezifische Fehler Ich erhalte:
android.view.InflateException: Binary XML file line #18: Binary XML file line #18: Error inflating class fragment
Linie # 18 Punkte auf die erste Zeile des Fragments Tag.
MyFragment.java
public class MyFragment extends Fragment {
private static final String ARG_PARAM1 = "param";
private int param
public static MyFragment newInstance(int param) {
MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putInt(ARG_PARAM1, param);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.param = getArguments().getInt(ARG_PARAM1);
// do stuff with param, but obviously param is not set
// since constructor is called.
}
public interface OnFragmentInteractionListener {
void onFragmentInteraction(String username);
}
}
MyActivity.java
public class MyActivity extends AppCompatActivity implements MyFragment.OnFragmentInteractionListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_follower_list); // crashes at this line
Fragment newFragment = ListOfUsersFragment.newInstance(TypeOfUserList.FOLLOWING, "TestingUsername");
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.my_fragment, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
@Override
public void onFragmentInteraction(String username) {
// TODO (I'm just trying to get it to run first....
}
}
activity_my.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.MyActivity">
<!-- The following fragment's onCreate() method is called before newInstance() is called, causing issues. -->
<fragment
class ="xyz.mydomain.myproject.fragments.MyFragment"
android:id="@+id/my_fragment"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:layout_alignParentStart="true"
android:layout_marginTop="10dp"/>
</RelativeLayout>
'newInstance' sein ist IHR Factory-Methode und es wird nie aufgerufen, wenn Sie das Fragment setzen direkt in der Tätigkeit Layout. –