捆绑无法正常工作(getArguments()始终为null)[Android]

时间:2015-08-01 17:55:19

标签: android arguments bundle

我的代码几个小时前就已经开始工作但现在不行了,我看不出是什么原因。

这是我的听众,我点击后更改了片段:

CustomMarkRow.java

public void onClick(DialogInterface dialogInterface, int i){
    Bundle bundle = new Bundle();
    bundle.putInt("id", CustomMarkRow.this.mark.getId());
    FragmentManager fragmentManager = CustomMarkRow.this.fragmentManager;
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();                       activity.getActionBar().setSelectedNavigationItem(CustomMarkRow.this.positionTab);
    EditMarkFragment fragment = new EditMarkFragment();
    fragment.setArguments(bundle);
    fragmentTransaction.replace(R.id.fragmentContainer, fragment,"2");
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

此时,fragment.getArguments()包含我放入的内容:

{android.os.Bundle@3644} "Bundle[{id=1}]"

在我的第二个档案中: EditMarkFragment.java

public class EditMarkFragment extends Fragment {
    public View view;

    public EditMarkFragment(){
        super();
    }

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

        this.view = inflater.inflate(getResources().getIdentifier("edit_mark", "layout",container.getContext().getPackageName()), container, false);

        if(this.getArguments()==null){ // always null
            ...
        }

        return this.view
}

getArguments()总是在这里返回null,这个样本有什么不好?

*编辑* 这是我的启动器类:

public class Launcher extends Activity implements ActionBar.TabListener {

private HomeFragment frag1 = new HomeFragment();
private EditMarkFragment frag2  = new EditMarkFragment();
private MarkListFragment frag3 = new MarkListFragment();
private EditCategoryFragment frag4 = new EditCategoryFragment();
private CategoryListFragment frag5 = new CategoryListFragment();


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    setContentView(R.layout.launcher);

    //Configuration de la barre d'onglet

    getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab tab1 = getActionBar().newTab().setTabListener(this).setTag("1").setText("Home"); //.setIcon(R.drawable.homew);
    getActionBar().addTab(tab1);

    ActionBar.Tab tab2 = getActionBar().newTab().setTabListener(this).setTag("2").setText("New Mark"); //.setIcon(R.drawable.addw);
    getActionBar().addTab(tab2);

    ActionBar.Tab tab3 = getActionBar().newTab().setTabListener(this).setTag("3").setText("My Marks"); //.setIcon(R.drawable.listw);
    getActionBar().addTab(tab3);

    ActionBar.Tab tab4 = getActionBar().newTab().setTabListener(this).setTag("4").setText("New Category"); //.setIcon(R.drawable.categoryw);
    getActionBar().addTab(tab4);

    ActionBar.Tab tab5 = getActionBar().newTab().setTabListener(this).setTag("5").setText("Categories"); //.setIcon(R.drawable.categoryw);
    getActionBar().addTab(tab5);

}

@Override
public void onTabSelected(ActionBar.Tab tab, android.app.FragmentTransaction ft) {

    if(tab.getTag().equals("1")){
        ft.replace(R.id.fragmentContainer, frag1);
    }
    else if(tab.getTag().equals("2")){
        ft.replace(R.id.fragmentContainer, frag2);
    }
    else if(tab.getTag().equals("3")){
        ft.replace(R.id.fragmentContainer, frag3);
    }
    else if(tab.getTag().equals("4")){
        ft.replace(R.id.fragmentContainer, frag4);
    }
    else if(tab.getTag().equals("5")){
        ft.replace(R.id.fragmentContainer, frag5);
    }
}

@Override
public void onTabUnselected(ActionBar.Tab tab, android.app.FragmentTransaction ft) {

    if(tab.getTag().equals("1")){
        ft.remove(frag1);
    }
    else if(tab.getTag().equals("2")){
        ft.remove(frag2);
    }
    else if(tab.getTag().equals("3")){
        ft.remove(frag3);
    } else if(tab.getTag().equals("4")){
        ft.remove(frag4);
    }
 else if(tab.getTag().equals("5")){
    ft.remove(frag5);
}
}

@Override
public void onTabReselected(ActionBar.Tab tab, android.app.FragmentTransaction ft) {

}
}

2 个答案:

答案 0 :(得分:0)

虽然您的onClick()代码正在创建参数Bundle,但您的onCreate()却没有。如果 版本的片段调用getArguments(),则该方法将返回null

答案 1 :(得分:-1)

1 - 更新您的EditMark片段,如下所示: -

public class EditMarkFragment extends Fragment { 
public static View view;

 public static EditMarkFragment newInstance(int id) {
    EditMarkFragment fragment = new EditMarkFragment();
    Bundle bundle = new Bundle();
    bundle.putInt("id", id);
    fragment.setArguments(bundle);
    return fragment;
}

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

    this.view = inflater.inflate(getResources().getIdentifier("edit_mark", "layout",container.getContext().getPackageName()), container, false);

  int id=getArguments.getInt("id");

    return this.view} 

2- Inside CustomMarkRow将您的代码更新为: -

 public void onClick(DialogInterface dialogInterface, int i){
    FragmentManager fragmentManager = CustomMarkRow.this.fragmentManager;
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();                       activity.getActionBar().setSelectedNavigationItem(CustomMarkRow.this.positionTab);
    EditMarkFragment fragment =  EditMarkFragment.newInstance(CustomMarkRow.this.mark.getId()) ;
    fragmentTransaction.replace(R.id.fragmentContainer, fragment,"2");
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

试试这个,希望这会帮助你。