讓我開始說這個我已經嘗試過從片段發送數據到另一個片斷,每次都以某種方式失敗。片段到片段通信(尋呼機適配器)
我有一個與尋呼機適配器和標籤的主要活動,我有5個片段,我需要從片段5發送數據到其餘的,我嘗試過接口和其他3種方式,我最終崩潰或出現錯誤開始。
我用接口和它的作品只是有時,爲了找到它爲什麼在某些情況下,我來到這裏,但沒有得到任何答案
提前謝謝你不工作。
主要活動:
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;
}
}
}
主要活動佈局:
<?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>
片段版本是相似
片段:
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:
我使用共享偏好utils的和一切工作,除了當我去到的數據發送
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)
這是指這種方法的頁面我得到這個錯誤:
public static int getData1(Context context) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME,
Context.MODE_PRIVATE);
return sp.getInt(DATA1, x);
}
片段1我得到的數據: int Riddle = SharedPreferenceUtils.getData1(getActivity());
我只有1個數據,那就是int和我正在尋找sharedprefences,我發現了很多好東西。
所以這是我在做什麼,它的工作原理:
片段5(發送數據的片段):
Context context = getActivity();
SharedPreferences SU = context.getSharedPreferences(
"Riddle", Context.MODE_PRIVATE);
SharedPreferences.Editor editor= SU.edit();
editor.putString("riddle",""+riddle);
editor.commit();
片段1(獲取數據):
Context context = getActivity();
SharedPreferences SU = context.getSharedPreferences(
"Riddle", Context.MODE_PRIVATE);
Riddle= Integer.parseInt(SU.getString("riddle",""));
我有一些發送整數的問題,所以我發送字符串並轉換爲int
要在碎片之間發送數據,有多種方法可以實現此目的。 1.通過共享首選項實現2.創建一個靜態變量來發送數據(不推薦)。 –
您應該使用接口在兩個片段之間發送數據。數據應該由活動傳遞。 https://developer.android.com/training/basics/fragments/communicating.html –
請在logcat中提供錯誤。 – HaroldSer