0

我想将意图值传递给片段,现在在活动中我通过 onNewIntent 获取意图值,但我通过 Bundle 将意图值传递给片段,但它不起作用。

* MainActivity.java *

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    parseMessage = intent.getStringExtra("message");

    if (parseMessage.length()>0) {
        Bundle bundle = new Bundle();
        bundle.putString("parseJson", parseMessage);

        AbcdFragment activityFrag = new AbcdFragment();
        activityFrag.setArguments(bundle);
    }  
}

@SuppressLint("DefaultLocale") 
public class AllPagerAdapter extends FragmentPagerAdapter {

    public AllPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

        switch(position){
            case 0:
                return AbcdFragment.newInstance(getApplicationContext());
            case 1:
                return HelloFragment.newInstance(getApplicationContext());
            default:
                return null;
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return CONTENT[position].toUpperCase();
    }

    @Override
    public int getCount() {
        return 2;
    }
}

* AbcdFragment.java *

public class AbcdFragment extends Fragment{

    public static AbcdFragment newInstance(Context context) {
       AbcdFragment fragment = new AbcdFragment();
       fragment.context = context;

       return fragment;
    }

   @SuppressLint("InflateParams") 
   @Override
   public View onCreateView(LayoutInflater inflater,
        ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.abcd_activity,container,false);

    try {
        parseJsonRes = getArguments().getString("parseJson");
        Log.d("ParseActivityMsg", parseJsonRes);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return view;
  }
}

这是一个视图页面片段,我想将意图值传递给 AbcdFragment,但我在 AbcdFragment 中得到空值。

请仔细阅读我的代码并建议我一些解决方案

4

1 回答 1

0

看看您如何在视图寻呼机中创建片段return AbcdFragment.newInstance(getApplicationContext());

然后看看你的实现AbcdFragment.newInstance

public static AbcdFragment newInstance(Context context) {
   AbcdFragment fragment = new AbcdFragment();
   fragment.context = context;

   return fragment;
}

您必须为在return AbcdFragment.newInstance()该方法中创建的片段设置参数。此外,您甚至没有使用您在 onNewIntent 中创建的片段,您只是在创建它并且什么都不做。

此外,如果 onNewIntent 被调用,MainActivity 可能已经处于活动状态,因此 AbcdFragment 可能已经在内存中,因此不会调用 getItem 并且不会使用新参数创建 newInstance,如果这有意义的话。因为您的 ViewPager 中只有 2 个片段,所以第一次创建它们后,它们将存储在内存中,而不是每次在两者之间交换时重新创建。

因此,如果您想坚持当前的实现,您必须设置参数AbcdFragment.newInstance并确保在 onNewIntent 之后创建片段的新实例。这可能不是将数据获取到片段的最佳方式。

于 2015-07-26T00:25:11.277 回答