将arraylists从片段传递到root活动

时间:2016-01-28 12:57:19

标签: android

enter image description here我正在为服务员构建订单接收应用程序,其中半页是包含listview的活动布局,一半是viewpager,其中包含片段中的json arraylist。我想在点击+按钮时添加片段中的菜单数据,并在根活动的列表视图中添加数量

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/My_Container_1_ID"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapsing_toolbar"
                android:layout_width="match_parent"
                android:layout_height="140dp"
                android:fitsSystemWindows="true"
                app:contentScrim="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|exitUntilCollapsed">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:contentDescription="@string/app_name"
                    app:layout_collapseMode="parallax"
                    android:background="@mipmap/bgactionbar">

                <ImageView
                    android:id="@+id/logo"
                    android:layout_width="80dp"
                    android:layout_height="80dp"
                    android:layout_marginLeft="30dp"
                    android:layout_centerVertical="true"
                    android:layout_alignParentLeft="true"
                    android:background="@mipmap/logoapp"
                    />
                    <ImageView
                        android:id="@+id/triangle"
                        android:layout_width="280dp"
                        android:layout_height="100dp"
                        android:layout_toRightOf="@+id/logo"
                        android:background="@mipmap/caley"
                        />
                    <RelativeLayout
                        android:id="@+id/searchLayout"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        android:layout_toRightOf="@+id/triangle"
                        android:background="#F3EEE8"
                        android:descendantFocusability="beforeDescendants"
                        android:focusableInTouchMode="true">
                        <ImageView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_centerVertical="true"
                            android:src="@android:drawable/ic_menu_search"
                            android:layout_toRightOf="@+id/search_menu"
                            />
                        <EditText
                            android:id="@+id/search_menu"
                            android:layout_width="350dp"
                            android:layout_height="40dp"
                            android:layout_marginLeft="10dp"
                            android:layout_marginRight="10dp"
                            android:hint="Search Menu..."
                            android:textColorHint="@color/tab_text"
                            android:textColor="@color/tab_text"
                            android:background="@android:color/transparent"
                            android:layout_alignParentLeft="true"
                            android:inputType="textVisiblePassword"/>

                    </RelativeLayout>
                    <ImageView
                        android:id="@+id/coffee"
                        android:layout_width="110dp"
                        android:layout_height="140dp"
                        android:layout_toRightOf="@+id/searchLayout"
                        android:background="@mipmap/coffee"
                        android:layout_alignParentRight="true"
                        />
                </RelativeLayout>

                <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    app:layout_collapseMode="pin"
                    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
            </android.support.design.widget.CollapsingToolbarLayout>

            <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabGravity="fill"
                style="@style/MyCustomTabLayout"
                android:background="@mipmap/background"
                app:tabMode="fixed" />
        </android.support.design.widget.AppBarLayout>
    </FrameLayout>

    <RelativeLayout
        android:id="@+id/content"
        android:layout_width="360dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:background="@mipmap/background"
        android:layout_below="@id/My_Container_1_ID">

        <TextView
            android:id="@+id/txtorder"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:text="Order"
            android:textStyle="bold"
            android:textColor="@color/tab_text"
            android:textSize="20sp" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/orderlist"
            android:layout_width="340dp"
            android:layout_height="match_parent"
            android:layout_above="@+id/submit_order"
            android:layout_below="@+id/txtorder"
            android:background="@mipmap/background"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

        <Button
            android:id="@+id/submit_order"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignEnd="@+id/orderlist"
            android:layout_alignParentBottom="true"
            android:layout_alignRight="@+id/orderlist"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="10dp"
            android:background="#EE6426"
            android:textColor="@android:color/white"
            android:text="Submit" />


    </RelativeLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/My_Container_1_ID"
        android:layout_toRightOf="@+id/content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</RelativeLayout>

public class Menu extends AppCompatActivity implements Coffee.OnMenuInteractionListener {
   // private ArrayList<MenuDataModel> allOrders;
    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    ListView listView;
    RecyclerView recyclerView;
    RecyclerAdapter adapter;
  //  MenuTabAdapter adapter;
 //   ArrayList<MenuDataModel> allOrders;
    private List<MenuDataModel> allOrders = new ArrayList<MenuDataModel>();
  //  private List<String> orderList = new ArrayList<>();
    private String Quantity, Name;
    EditText count, inputSearch;
    TextView order;
    String searchValue;
    private ArrayList<String> stringArrayList;
    CollapsingToolbarLayout collapsingToolbar;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        collapsingToolbar= (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
    //    collapsingToolbar.setTitle(getString(R.string.app_name));


        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
//        listView = (ListView) findViewById(R.id.orderlist);
//        adapter = new MenuTabAdapter(this, allOrders);
//        listView.setAdapter(adapter);
        TextView orddd = (TextView) findViewById(R.id.txtorder);
        inputSearch = (EditText) findViewById(R.id.search_menu);
//        inputSearch.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//
//                collapsingToolbar.setVisibility(View.GONE);
//
//            }
//        });

//        recyclerView = (RecyclerView) findViewById(R.id.orderlist);
//        recyclerView.setHasFixedSize(true);
//        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//        recyclerView.setLayoutManager(layoutManager);
//
//        adapter = new RecyclerAdapter(this, allOrders);
//        recyclerView.setAdapter(adapter);

    }



    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new Coffee(), "Coffee");
        adapter.addFragment(new Coffee(), "BreakFast");
        adapter.addFragment(new Coffee(), "Beverage");
        viewPager.setAdapter(adapter);
    }

    @Override
    public void onFragmentSetOrders(ArrayList<MenuDataModel> menuList) {
        allOrders = menuList;
    }


    @Override
    public void onMenuListItemClick(int position) {
        //musicService.setSong(position);
        MenuDataModel menuorder = allOrders.get(position);
      //  menuorder.setName(menuorder.getName());
      //  menuorder.setName(allOrders);
        allOrders.add(menuorder);


    }

        class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }

}

public class Coffee extends Fragment {
    ListView listView;
    MenusAdapter adapter;
    // Movies json url
    private static final String url = "url";
    private ProgressDialog pDialog;
    private List<MenuDataModel> menuList = new ArrayList<MenuDataModel>();
    OnMenuInteractionListener menuItemClick;
    private String searchData;
    private EditText inputSearch;
    //  Activity activity;
    //OnMenuInteractionListener mCallback;

    public Coffee() {
        // Required empty public constructor
    }

    public interface OnMenuInteractionListener {
        public void onFragmentSetOrders(ArrayList<MenuDataModel> menuList);

        public void onMenuListItemClick(int position);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        menuItemClick = (OnMenuInteractionListener) getActivity();

    }

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
//        searchData = getArguments().getString("search");
        inputSearch = (EditText) getActivity().findViewById(R.id.search_menu);
        inputSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // When user changed the Text
                //adapter.getFilter().filter(cs.toString());
                if (count < before) {
                    // We're deleting char so we need to reset the adapter data
                    adapter.resetData();
                }
                Coffee.this.adapter.getFilter().filter(s);
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
            }


        });

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

        listView = (ListView) view.findViewById(R.id.list);
        adapter = new MenusAdapter(getActivity(), menuList);
        listView.setAdapter(adapter);

        pDialog = new ProgressDialog(getActivity());
        // Showing progress dialog before making http request
        pDialog.setMessage("Loading...");

        pDialog.setCancelable(false);

        showpDialog();


        // Creating volley request obj
        JsonObjectRequest bookingReq = new JsonObjectRequest(Request.Method.GET, "" + url + "?", null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d("bsd", response.toString());
                        // Parsing json

                        try {

                            JSONArray menu = response.getJSONArray("menus");
                            int length = menu.length();
                            for (int i = 0; i < menu.length(); i++) {
                                JSONObject obj = menu.getJSONObject(i);
                                MenuDataModel dm = new MenuDataModel();
                                // Log.d("vdata", String.valueOf(menu.length()));
                                dm.setID(obj.getString("id"));
                                dm.setName(obj.getString("name"));
                                dm.setThumbnailUrl(obj.getString("photo"));
                                Log.d("image", String.valueOf(obj.getString("photo")));
                                dm.setDescription(obj.getString("description"));
                                dm.setRate(obj.getString("price"));
                                dm.setStatus(obj.getString("status"));

                                // adding movie to movies array
                                menuList.add(dm);

                                // Log.d("nth", String.valueOf(i));
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                        hidepDialog();

                        // notifying list adapter about data changes
                        // so that it renders the list view with updated data
                        adapter.notifyDataSetChanged();


                    }


                }, new Response.ErrorListener() {
            @SuppressWarnings("deprecation")
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d("b", "Error: " + error.getMessage());
                hidepDialog();
            }
        });

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(bookingReq);

        return view;
    }

    private void showpDialog() {
        if (!pDialog.isShowing())
            pDialog.setMessage("Please wait...");
        pDialog.show();
    }

    private void hidepDialog() {
        if (pDialog != null) {
            pDialog.dismiss();
            pDialog = null;
        }
    }

}


public class MenusAdapter extends BaseAdapter implements Filterable {

    private static final String TAG = MenusAdapter.class.getSimpleName();
    List<MenuDataModel> MenuItems;
    List<MenuDataModel> mSearchValues;
    private android.widget.Filter menufilter;
    Coffee.OnMenuInteractionListener mCallback;

    //private Activity activity;
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public MenusAdapter(Activity activity, List<MenuDataModel> MenuItems) {
        //this.activity = activity;
        this.MenuItems = MenuItems;
        this.mSearchValues = MenuItems;

    }

    @Override
    public int getCount() {
        return MenuItems.size();    // total number of elements in the list
    }

    @Override
    public Object getItem(int i) {
        return MenuItems.get(i);    // single item in the list
    }

    @Override
    public long getItemId(int i) {
        return i;                   // index number
    }

    @Override
    public View getView(final int index, View view, final ViewGroup parent) {

        if (view == null) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            view = inflater.inflate(R.layout.menu_item, parent, false);
        }
        // if (imageLoader == null)
        //     imageLoader = AppController.getInstance().getImageLoader();

        final ImageView increase = (ImageView) view.findViewById(R.id.icon_increase);
        ImageView decrease = (ImageView) view.findViewById(R.id.icon_decrease);
        final EditText count = (EditText) view.findViewById(R.id.count_menu);
        NetworkImageView thumbnailUrl = (NetworkImageView) view.findViewById(R.id.menu_image);
        TextView name = (TextView) view.findViewById(R.id.menu_items);
        //  TextView description = (TextView) view.findViewById(R.id.description);
        //  TextView rate = (TextView) view.findViewById(R.id.price);

        final MenuDataModel data = MenuItems.get(index);

        name.setText(String.valueOf(data.getName()));
        thumbnailUrl.setImageUrl(data.getThumbnailUrl(), imageLoader);
        thumbnailUrl.setDefaultImageResId(R.mipmap.logoapp);
        thumbnailUrl.setErrorImageResId(R.mipmap.logoapp);
        // description.setText(String.valueOf(data.getDescription()));
//           title.setText(data.getTitle());
        //  rate.setText(String.valueOf(data.getRate()));


        //          final double dis = Double.valueOf(data.getRate());
        final int[] quantity = {MenuItems.get(index).getAnInt()};
        increase.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //Toast.makeText(parent.getContext(), "Button Clicked"+ dataModel.getName(),Toast.LENGTH_LONG).show();
                //Intent yes= new Intent(parent.getContext(), yes(dataModel.getName().class));

                quantity[0]++;
                count.setText(quantity[0] + "");
                count.setTag(quantity[0] + "");
                //  mCallback.onFragmentSetOrders(all);
                  mCallback.onMenuListItemClick(MenuItems.get(index).getAnInt());

                //  Coffee.OnMenuInteractionListener listener = (Coffee.OnMenuInteractionListener) activit;
                //   mCallback.onFragmentSetOrders(menu);

//                Bundle bundle = new Bundle();
//                bundle.putString("quantity", quantity[0] + "");
//                bundle.putString("name", String.valueOf(data.getName()));
                // q.putExtra("bookingid", dataModel.getbkid());
                //  parent.getContext().startActivity(q);


            }

        });
        decrease.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                count.getTag();
                count.setTag(quantity[0] + "");
                quantity[0]--;
                count.setText(quantity[0] + "");


            }

        });


        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


            }
        });

        return view;
    }

    @Override
    public Filter getFilter() {
        if (menufilter == null)
            menufilter = new MenuFilter();

        return menufilter;
    }

    public void resetData() {
        MenuItems = mSearchValues;
    }


    private class MenuFilter extends android.widget.Filter {

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            // We implement here the filter logic
            if (constraint == null || constraint.length() == 0) {
                // No filter implemented we return all the list
                results.values = mSearchValues;
                results.count = mSearchValues.size();
            } else {
                // We perform filtering operation
                List<MenuDataModel> nDriverList = new ArrayList<MenuDataModel>();

                for (MenuDataModel p : MenuItems) {
                    if (p.getName().toUpperCase().startsWith(constraint.toString().toUpperCase()))
                        nDriverList.add(p);

                }
                results.values = nDriverList;
                results.count = nDriverList.size();

            }
            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint,
                                      FilterResults results) {

            // Now we have to inform the adapter about the new list filtered
            if (results.count == 0)
                notifyDataSetInvalidated();
            else {
                MenuItems = (List<MenuDataModel>) results.values;
                notifyDataSetChanged();
            }

        }

    }

    ;

}

i am getting null pointer exception on mCallback.onMenuListItemClick(MenuItems.get(index).getAnInt());

1 个答案:

答案 0 :(得分:1)

第1步:创建界面

public interface ActivityCommunicator{
    public void passDataToActivity(ArrayList<string> arrayList);
}

步骤2:初始化片段类中的接口对象

private ActivityCommunicator activityCommunicator;;
public void onAttach(Activity activity)
{
        super.onAttach(activity);
        context = getActivity();
        activityCommunicator =(ActivityCommunicator)context;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
      super.onActivityCreated(savedInstanceState);
      init();
}

public void init() {

 activityButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                activityCommunicator.passDataToActivity("Your Array List");
            }
        });
 }

第3步:从活动类中的片段访问您的arraylist。

    public class MainActivity extends FragmentActivity implements ActivityCommunicator{

 public static ArrayList<String> aList;

           @Override
           public void passDataToActivity(ArrayList<String> arrayList){
             aList = arrayList;
          }
    }