Lassen Sie mich damit beginnen, dass ich versucht habe, Daten von einem Fragment an ein anderes zu senden und jedes Mal irgendwie fehlgeschlagen.Fragment zu Fragment-Kommunikation (Pager-Adapter)
Ich habe eine Hauptaktivität mit Pager Adapter und Tabs und ich habe 5 Fragmente und ich muss Daten von Fragment 5 an den Rest von ihnen senden, habe ich Schnittstelle und 3 andere Möglichkeiten versucht, und ich am Ende Absturz oder Fehler auf Anfang.
verwendet I-Schnittstelle und es funktioniert nur manchmal und um zu finden, warum es Arbeit in einigen Fällen tut ich hierher gekommen sind, haben aber noch keine Antworten bekam
danken Ihnen im Voraus.
Hauptaktivität:
package com.redot.puzzle3;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.WindowManager;
public class MainActivity extends AppCompatActivity {
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Remove title bar
// this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.setContentView(R.layout.activity_main);
mSectionsPagerAdapter = new
SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setCurrentItem(3);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
FloatingActionButton fab = (FloatingActionButton)
findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action",
Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return 5;
}
@Override
public Fragment getItem(int arg0) {
switch (arg0) {
case 0:
return new Frag1();
case 1:
return new Frag2();
case 2:
return new Frag3();
case 3:
return new Frag4();
case 4:
return new Frag5();
case 5:
default:
return null;
}
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Inventory";
case 1:
return "3Men";
case 2:
return "Test";
case 3:
return "TheMan";
case 4:
return "King";
}
return null;
}
}
}
Hauptaktivität Layout:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.redot.puzzle3.MainActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/appbar_padding_top"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
Fragmente baut sind ähnliche
Fragmente:
public class Frag1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View myInflatedView = inflater.inflate(R.layout.fragment_frag1,
container, false);
return myInflatedView;
}
UPDATE:
verwendet Ich teilte Vorlieben utils und alles funktionierte, außer ich diese Fehlermeldung bekam, wenn ich auf die Seite gehen, wo die Daten
10-11 04:49:13.040 6734-6734/com.redot.puzzle3 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.redot.puzzle3, PID: 6734
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
at com.redot.puzzle3.SharedPreferenceUtils.getData1(SharedPreferenceUtils.java:30)
at com.redot.puzzle3.Frag1.<init>(Frag1.java:19)
at com.redot.puzzle3.MainActivity$SectionsPagerAdapter.getItem(MainActivity.java:71)
at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:101)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1005)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1153)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:665)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:627)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:608)
at android.support.design.widget.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected(TabLayout.java:2169)
at android.support.design.widget.TabLayout.dispatchTabSelected(TabLayout.java:1164)
at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1157)
at android.support.design.widget.TabLayout.selectTab(TabLayout.java:1127)
at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1426)
at android.support.design.widget.TabLayout$TabView.performClick(TabLayout.java:1536)
at android.view.View$PerformClick.run(View.java:21179)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6873)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
gesendet wird, die diesem Verfahren bezieht sich:
public static int getData1(Context context) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME,
Context.MODE_PRIVATE);
return sp.getInt(DATA1, x);
}
Fragment 1 wobei i die Daten erhalten: int Riddle = SharedPreferenceUtils.getData1 (getActivity());
Ich habe nur 1 Daten und das ist Int und ich suchte nach Shared Prefences und ich fand viele gute Sachen.
So ist es das, was ich tue, und es funktioniert:
Fragment 5 (das Fragment, das die Daten sendet):
Context context = getActivity();
SharedPreferences SU = context.getSharedPreferences(
"Riddle", Context.MODE_PRIVATE);
SharedPreferences.Editor editor= SU.edit();
editor.putString("riddle",""+riddle);
editor.commit();
Fragment 1 (bekommt die Daten):
Context context = getActivity();
SharedPreferences SU = context.getSharedPreferences(
"Riddle", Context.MODE_PRIVATE);
Riddle= Integer.parseInt(SU.getString("riddle",""));
Ich hatte ein paar Probleme mit dem Senden von Ints, also habe ich eine Zeichenfolge gesendet und in int konvertiert
Um Daten zwischen Fragmenten zu senden, gibt es mehrere Möglichkeiten, dies zu erreichen. 1. Implementieren durch gemeinsame Voreinstellung 2. Erstellen Sie eine statische Variable, um die Daten zu senden (nicht empfohlen). –
Sie sollten Daten zwischen zwei Fragmenten über eine Schnittstelle senden. Die Daten sollten von der Aktivität übergeben werden. https://developer.android.com/training/basics/fragments/communicating.html –
Bitte Fehler in Logcat. – HaroldSer