2014-12-07 3 views
0

Activity에서 NavigationDrawerFragment로 ArrayList를 보내야합니다. 나는 parcelable 사용하지만, 단편에 getArgument은 (Activity에서 NavigationDrawerFragment로 ArrayList를 보내는 방법은 무엇입니까?

MyClass에 널 : 활동의

public class NavListModel implements Parcelable { 
    private String Text; 
    private int Type; 
    private int Id; 
    private String ImageURL=null; 

    public NavListModel(int Type, int id, String Text, String ImageURL) 
    { 
     this.Text=Text; 
     this.Type=Type; 
     this.Id=id; 
     this.ImageURL=ImageURL; 
    } 

    public NavListModel(int Type, int id, String Text) 
    { 
     this.Text=Text; 
     this.Type=Type; 
     this.Id=id; 
    } 

    public void setText(String Text) 
    { 
     this.Text=Text; 
    } 

    public void setType(int Type) 
    { 
     this.Type=Type; 
    } 

    public void setId(int id) 
    { 
     this.Id=id; 
    } 

    public String getText() 
    { 
     return this.Text; 
    } 

    public int getType() 
    { 
     return this.Type; 
    } 

    public int getId() 
    { 
     return this.Id; 
    } 

    public String getImageURL() 
    { 
     return this.ImageURL; 
    } 

    public void setImageURL(String ImageURL) 
    { 
     this.ImageURL=ImageURL; 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    private NavListModel(Parcel in) 
    { 
     Bundle bundle=in.readBundle(); 
     this.Id=(bundle.getInt("Id")); 
     this.Type=(bundle.getInt("Type")); 
     this.ImageURL=(bundle.getString("ImageURL")); 
     this.Text=(bundle.getString("Text")); 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     Bundle bundle = new Bundle(); 
     bundle.putString("ImageURL",this.ImageURL); 
     bundle.putString("Text",this.Text); 
     bundle.putInt("Id", this.Id); 
     bundle.putInt("Type",this.Type); 
     dest.writeBundle(bundle); 
    } 

    public static final Parcelable.Creator<NavListModel> CREATOR = new Parcelable.Creator<NavListModel>() { 

     @Override 
     public NavListModel createFromParcel(Parcel source) 
     { 
      Bundle bundle = source.readBundle(); 
      int Id=(bundle.getInt("Id")); 
      int Type=(bundle.getInt("Type")); 
      String ImageURL=(bundle.getString("ImageURL")); 
      String Text=(bundle.getString("Text")); 
      if (ImageURL==null) { 
       return new NavListModel(Type,Id,Text); 
      } 
      else 
      { 
       return new NavListModel(Type,Id,Text,ImageURL); 
      } 
     } 

     @Override 
     public NavListModel[] newArray(int size) { 
      return new NavListModel[size]; 
     } 
    }; 


} 

에서 OnCreate :

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ArrayList<NavListModel> items = new ArrayList<NavListModel>(); 
     items.add(new NavListModel(NavListAdapter.TYPE_ADDCAR,2,"hhh")); 
     items.add(new NavListModel(NavListAdapter.TYPE_CAR,3,"car","asd")); 
     items.add(new NavListModel(NavListAdapter.TYPE_USER,4,"user","asd")); 
     items.add(new NavListModel(NavListAdapter.TYPE_ITEM,5,"item","asd")); 
     items.add(new NavListModel(NavListAdapter.TYPE_HEADER,1,"header")); 
     items.add(new NavListModel(NavListAdapter.TYPE_HEADER,1,"header")); 
     items.add(new NavListModel(NavListAdapter.TYPE_HEADER,1,"asd")); 
     Bundle NavItems = new Bundle(); 
     NavItems.putParcelableArrayList("items", items); 
     mNavigationDrawerFragment = new NavigationDrawerFragment(); 
     mNavigationDrawerFragment.setArguments(NavItems); 
     mNavigationDrawerFragment = (NavigationDrawerFragment) 
       getFragmentManager().findFragmentById(R.id.navigation_drawer); 
     mTitle = getTitle(); 
     // Set up the drawer. 
     mNavigationDrawerFragment.setUp(
       R.id.navigation_drawer, 
       (DrawerLayout) findViewById(R.id.drawer_layout)); 

}

및 OnCreateView :

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     mDrawerListView = (ListView) inflater.inflate(
       R.layout.fragment_navigation_drawer, container, false); 
     mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       selectItem(position); 
      } 
     }); 
     ArrayList<NavListModel> items = new ArrayList<NavListModel>(); 
     /**items[0]=new NavListModel(NavListAdapter.TYPE_HEADER,1,"asd"); 
     items[1]=new NavListModel(NavListAdapter.TYPE_ADDCAR,2,"hhh"); 
     items[2]=new NavListModel(NavListAdapter.TYPE_CAR,3,"car","asd"); 
     items[3]=new NavListModel(NavListAdapter.TYPE_USER,4,"user","asd"); 
     items[4]=new NavListModel(NavListAdapter.TYPE_ITEM,5,"item","asd"); 
     items[5]=new NavListModel(NavListAdapter.TYPE_HEADER,1,"header"); 
     items[6]=new NavListModel(NavListAdapter.TYPE_HEADER,1,"header");**/ 
     if (getArguments()!=null) { 
      items = getArguments().getParcelableArrayList("items"); 
     } 
     else 
     items.add(new NavListModel(NavListAdapter.TYPE_HEADER,1,"asd")); 
     items.add(new NavListModel(NavListAdapter.TYPE_ADDCAR,1,"asd")); 
     mDrawerListView.setAdapter(new NavListAdapter(
       getActionBar().getThemedContext(), 
       android.R.id.text1, 
       items)); 
     mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 
     return mDrawerListView; 
    } 

getArgumen ts는 조각에서 null입니다. (무엇이 효과가 없으며 어떻게 해결할 수 있습니까?

답변

2

귀하의 문제는 여기에 있습니다 :

mNavigationDrawerFragment = new NavigationDrawerFragment(); 
mNavigationDrawerFragment.setArguments(NavItems); 
mNavigationDrawerFragment = (NavigationDrawerFragment) 
       getFragmentManager().findFragmentById(R.id.navigation_drawer); 

가 먼저하는 당신이 인수를 설정() 새로운 NavigationDrawerFragment을 만들 수 있습니다.

는 다음 줄에 당신은 findFragmentById를 호출하여 모든 것을 무시하고 mNavigationDrawerFragment에게 조각의 새로운 인스턴스 (XML에서 팽창 한)

올바른 순서는 이것이다 지정 : 그것은 지금

mNavigationDrawerFragment = (NavigationDrawerFragment) 
        getFragmentManager().findFragmentById(R.id.navigation_drawer); 
mNavigationDrawerFragment.setArguments(NavItems); 

을 작동해야합니다.

관련 문제