捆绑不工作

时间:2016-01-14 07:51:25

标签: android android-fragments android-activity bundle

我正在尝试将数据从活动发送到片段,但是在片段中我得到的是null而不是我的值,以下是我的代码可以帮助我吗?

String nofrndthere="nofrnds";
            String frndthere="frnds";
            if(jsonary.length()==0)
            {
               // Toast.makeText(MainActivity.this,"Null",Toast.LENGTH_SHORT).show();

                Bundle bundle = new Bundle();
                bundle.putString("nofrndsavailable", nofrndthere);
                HomeFragment fragobj = new HomeFragment();
                fragobj.setArguments(bundle);
            }
            else if(jsonary.length()!=0)
            {
              //  Toast.makeText(MainActivity.this,"Not Null",Toast.LENGTH_SHORT).show();
                Bundle bundle = new Bundle();
                bundle.putString("frndsavailable", frndthere);
                HomeFragment fragobj = new HomeFragment();
                fragobj.setArguments(bundle);
            }

HomeFragment

    public class HomeFragment extends Fragment {

    ExpandableListAdapter listAdapter;
    ExpandableListView expListView;
    List<String> listDataHeader;
    HashMap<String, List<String>> listDataChild;

    private FragmentTabHost tabHost;
    private SearchView searchView;
    private String strtext;
    private String strtextss,strtextfnrdval;


    public HomeFragment() {
    }

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

        tabHost = new FragmentTabHost(getActivity());
        tabHost.setup(getActivity(), getChildFragmentManager(), R.layout.my_parent_fragment);


        Bundle bundle = this.getArguments();
        strtext = bundle.getString("user_login_id");
        if (getArguments() != null) {
            strtextss = bundle.getString("nofrndsavailable");
            strtextfnrdval= bundle.getString("frndsavailable");

        }
        System.out.println("DATASSSSS :  " +strtextss+strtextfnrdval);

        System.out.println("<<<<<<<<<<<<<< Session ID :  " + strtext+strtextss+strtextfnrdval);



        Bundle arg1 = new Bundle();
        arg1.putInt("Arg for Frag1", 1);
        if(strtext!=null) {
            arg1.putString("user_logid", strtext);
        }

        tabHost.addTab(tabHost.newTabSpec("one").setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_profile_tabs,"Home")), DiscoverFragment.class, arg1);
        Bundle arg2 = new Bundle();

        arg2.putInt("Arg for Frag2", 2);

        if(strtext!=null) {
            arg2.putString("user_logid_sectab", strtext);
        }

        tabHost.addTab(tabHost.newTabSpec("Sec").
                setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_frnds_tab,"Invite")), ShopFragment.class, arg2);


        Bundle arg3 = new Bundle();
        arg3.putInt("Arg for Frag3", 3);

        if(strtext!=null) {
            arg3.putString("user_logid_thirdtab", strtext);
        }



        tabHost.addTab(tabHost.newTabSpec("Third").
                setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_wish_tab,"Wish")), Thirdtab.class, arg3);


        Bundle arg4 = new Bundle();
        arg4.putInt("Arg for Frag4", 4);
        if(strtext!=null) {
            arg4.putString("user_logid_fourthtab", strtext);
        }


        if(strtextss == getArguments().getString("nofrndsavailable"))
        {
           // Toast.makeText(getActivity(), "Null in home", Toast.LENGTH_SHORT).show();
            System.out.println("Null in home");
            tabHost.addTab(tabHost.newTabSpec("Four").
                    setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_notification_tab, "Alert")), FourthTabs.class, arg4);

        }
        else if(strtextfnrdval == getArguments().getString("frndsavailable"))
        {
          //  Toast.makeText(getActivity(), "Not Null in home", Toast.LENGTH_SHORT).show();
            System.out.println("NotNull in home");
            tabHost.addTab(tabHost.newTabSpec("Four").
                    setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_fnrdalert, "Alert")), FourthTabs.class, arg4);

        }

        return tabHost;


    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

    public View getTabIndicator(Context context, int icon,String text) {
        View view = LayoutInflater.from(context).inflate(R.layout.tab_layout, null);
        ImageView iv = (ImageView) view.findViewById(R.id.indicatorImageView);
        iv.setImageResource(icon);
        TextView txt = (TextView) view.findViewById(R.id.txttb);
        txt.setText(text);
        return view;
    }



}

2 个答案:

答案 0 :(得分:1)

在打开片段之前,您可以将捆绑包附加到它上面。以下代码应该在您的活动中以将包放入片段中。

hasOneOrMoreParameters

现在您已经附加了捆绑打开片段。

你需要做的就是覆盖片段中的str_replace ($search, $replace, $subject); 方法,这就是你收到包的方法。

Hotel.auth=function(uname,pwd, cb)
    {
        Hotel.app.models.MyUser.login({username: uname, password: pwd}, function (err, token) {
            if(err)
                cb(null,err);
            else
                cb(null,token);
        });
    }

    Hotel.remoteMethod(
        'auth', 
        {
           accepts: 
          [
          {arg: 'uname', type: 'string',required: true},
          {arg: 'pwd', type: 'string',required: true}
          ],
          returns: {arg: 'Response Message', type: 'string'}
        }
    );
  

更新   通过我与你的对话,你可以通过这样的活动开始你的片段告诉片段数组是否为空

Fragment fragment = new YourFragmentClass();
Bundle args = new Bundle();

args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);

并且在片段的onCreate()方法中,这是你如何读取布尔值

onCreate()
  

更新

好了,现在我意识到你在做什么(片段在设置包之前已经开始),你可以试试这个。 (这是非常厚脸皮)

private String mParam1; // these are global variable to get the data private String mParam2; // after you receive the data, it can be used under `onActivityCreated()` @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1,null); mParam2 = getArguments().getString(ARG_PARAM2,null); // I have updated the code thisis how you can check which string is empty. // cause if you try to do some work on null object you will get error if(mParam1 == null){ // it is empty }else{ // it is not empty } if(mParam2 == null){ // it is empty }else{ // it is not empty } } } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // here you can use mParam1 and mParam2 }

中制作方法
HomeFragment fragobj = new HomeFragment();

Bundle bundle = new Bundle();
if(jsonary.length()==0){
bundle.putBoolean("isAvailable", false);
}else{
bundle.putBoolean("isAvailable", true);
}

fragobj.setArguments(bundle);

现在,当您获得@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { boolean mParam1 = getArguments().getBoolean("isAvailable",false); } } 时,根据您可以执行此操作,您可以执行此操作。

HomeFragment

答案 1 :(得分:0)

根据您的问题,我认为您从包

获取user_login_id为null
Bundle bundle = this.getArguments();
strtext = bundle.getString("user_login_id"); 

这是因为你没有在你的包中添加user_login_id的任何字符串

 if(jsonary.length()==0)
  {
         // Toast.makeText(MainActivity.this,"Null",Toast.LENGTH_SHORT).show();

         Bundle bundle = new Bundle();
         bundle.putString("nofrndsavailable", nofrndthere);
         bundle.putString("user_login_id", <userid>); //put user id here

         HomeFragment fragobj = new HomeFragment();
         fragobj.setArguments(bundle);
   }
   else if(jsonary.length()!=0)
   {
          //  Toast.makeText(MainActivity.this,"Not Null",Toast.LENGTH_SHORT).show();
          Bundle bundle = new Bundle();
          bundle.putString("frndsavailable", frndthere);
          bundle.putString("user_login_id",<userid>);// put user id here
          HomeFragment fragobj = new HomeFragment();
          fragobj.setArguments(bundle);
     }