首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段到片段通信(寻呼机适配器)

片段到片段通信(寻呼机适配器)
EN

Stack Overflow用户
提问于 2017-10-11 03:04:59
回答 2查看 123关注 0票数 0

首先,我要说的是,我试过用各种方法将数据从一个片段发送到另一个片段,每次我都失败了。

我有一个带有寻呼机适配器和选项卡的主要活动,我有5个片段,我需要将数据从片段5发送到其余的片段,我尝试了接口和其他3种方法,最后在开始时崩溃或出错。

我使用了接口,它有时只起作用,为了找出为什么它在某些情况下不起作用,我来到这里,但没有得到任何答案。

提前谢谢你。

主要活动:

代码语言:javascript
复制
   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;
    }
}

}

主要活动布局:

代码语言:javascript
复制
   <?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>

片段的构建是类似的

碎片:

代码语言:javascript
复制
  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 ),除了当我转到发送数据的页面时出现了这个错误外,所有操作都正常工作。

代码语言:javascript
复制
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)

指的是这种方法:

代码语言:javascript
复制
 public static int getData1(Context context) {
    SharedPreferences sp = context.getSharedPreferences(SP_NAME, 
    Context.MODE_PRIVATE);
    return sp.getInt(DATA1, x);
}

获取数据的片段1: int Riddle= Riddle=

我只有一个数据,那就是int和我在寻找分享,我发现了很多好东西。

所以这就是我正在做的,它起作用了:

片段5(发送数据的片段):

代码语言:javascript
复制
  Context context = getActivity();
    SharedPreferences SU = context.getSharedPreferences(
            "Riddle", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor= SU.edit();
    editor.putString("riddle",""+riddle);
    editor.commit();

片段1(获取数据):

代码语言:javascript
复制
     Context context = getActivity();
         SharedPreferences SU = context.getSharedPreferences(
            "Riddle", Context.MODE_PRIVATE);
            Riddle=  Integer.parseInt(SU.getString("riddle",""));

我在发送int时遇到了一些问题,所以我发送了字符串并转换为int。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-11 04:17:27

您可以在代码中使用SharedPreferences

试试这个。

代码语言:javascript
复制
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的使用

代码语言:javascript
复制
SharedPreferenceUtils.createSP(getActivity(),data1,data2);

及其在其他中的应用

代码语言:javascript
复制
String data1 = SharedPreferenceUtils.getData1(getActivity());
String data2 = SharedPreferenceUtils.getData2(getActivity());

Note

  • 将data1和data2更改为所需的值
  • getData1getData2更改为所需的方法
票数 1
EN

Stack Overflow用户

发布于 2017-10-11 06:26:45

实际上,你有很多选项可以与片段沟通。我建议您使用CachePot - Android简单数据缓存缓存数据。

首先,推送您想要传递的数据。

代码语言:javascript
复制
CachePot.getInstance().push(data);

第二,从CachePot中弹出数据。

代码语言:javascript
复制
public class MainFragment extends Fragment{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Data data = CachePot.getInstance().pop(Data.class);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46679120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档