Страница 1 из 1

передать Arraylist из activity в navigationdrawerfragment?

Добавлено: 07 дек 2014, 15:57
spbfriend
Добрый день!
Цель - сделать динамическое наполнение данными NavDrawerFragment, полученными от сервера.
Вижу так - требуется передать из активити в фрагмент данные, потом применить адаптер по ним.
Перепробовал кучу вариантов, начиная от доступа к статическим переменным и заканчивая этим:

main.java - коренное активити для бокового меню.

Код: Выделить всё

public class main extends Activity
        implements NavigationDrawerFragment.NavigationDrawerCallbacks {

    /**
     * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
     */


    private NavigationDrawerFragment mNavigationDrawerFragment;

    /**
     * Used to store the last screen title. For use in {@link #restoreActionBar()}.
     */
    private CharSequence mTitle;

    @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));


    }
класс модели:

Код: Выделить всё

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];
        }
    };


}
и сам класс бокового меню - 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=getArguments().getParcelableArrayList("items");

        mDrawerListView.setAdapter(new NavListAdapter(
                getActionBar().getThemedContext(),
                android.R.id.text1,
                items));
        mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
        return mDrawerListView;
    }
в фрагмент ничего не приходит... Если не знаете решения, предложите варианты, пожалуйста. парю голову 3й день.

Re: передать Arraylist из activity в navigationdrawerfragmen

Добавлено: 07 дек 2014, 16:48
finberg
mNavigationDrawerFragment = new NavigationDrawerFragment();
mNavigationDrawerFragment.setArguments(NavItems);

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

Не могу понять логики. Сначала создаете фрагмент. Потом ссылке присваивате результат findFragmentById ?

Re: передать Arraylist из activity в navigationdrawerfragmen

Добавлено: 07 дек 2014, 17:28
doter.ua