首先我要说的是,我已经尝试过各种方式将数据从一个片段发送到另一个片段,并且每次都以某种方式失败。
我有一个带有寻呼机适配器和标签的主要活动,我有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;
}
更新:
我使用了共享首选项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时遇到了一些问题,所以我发送了字符串并转换为int
答案 0 :(得分:1)
您可以在代码中使用gulp.task('default', function () {
return gulp.src('style.css')
.pipe(urlAdjuster({
replace: ['/old/path','/new/path],
}))
.pipe(gulp.dest('modifiedStyle.css'));
});
。
试试这个。
SharedPreferences
在public class SharedPreferenceUtils {
private static final String SP_NAME = "sp";
public static final String DATA1 = "data1";
public static final String DATA2 = "data2";
// create
public static boolean createSP(Context context, String data1, String data2) {
SharedPreferences.Editor editor = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE).edit();
editor.putString(DATA1, data1);
editor.putString(DATA2, data2);
return editor.commit();
}
// clear
public static void clearSP(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear().apply();
}
// get access info
public static String getData1(Context context) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
return sp.getString(DATA1, "");
}
// get branch info
public static String getData2(Context context) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
return sp.getString(DATA2, "");
}
}
Frag5
并在其他SharedPreferenceUtils.createSP(getActivity(),data1,data2);
Fragment
注意强>
String data1 = SharedPreferenceUtils.getData1(getActivity());
String data2 = SharedPreferenceUtils.getData2(getActivity());
和getData1
更改为您想要的方法答案 1 :(得分:1)
实际上,您有很多选项可以与片段进行通信。我想建议您CachePot - Android Simple Data Cache缓存数据。
首先,推送您想要传递的数据。
CachePot.getInstance().push(data);
然后从CachePot弹出您的数据。
public class MainFragment extends Fragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Data data = CachePot.getInstance().pop(Data.class);
}