单击listview内的按钮,然后触发gridview在android studio上加载其按钮列表

时间:2017-02-03 06:17:21

标签: android listview gridview

我有一个listview,来自数据库(类别列表),当我点击类别列表视图中的任何按钮时,我想加载gridview(产品gridview),我能够制作listview和gridview,但无法连接他们,因为我仍然是Android编程的新手,并且没有任何线索可以做到。

我的主要目的是:

  1. 列表类别
  2. 点击类别按钮将加载产品按钮的gridview
  3. 点击产品按钮会将产品ID添加到表格购物车
  4. ps:如果你注意到我在mainActivity类中进行了SQL查询,那么我仍然是代码中的新手,所以我在转换到更好的练习之前先尝试了我的最佳。

    有任何建议吗?

    这里我包含我的代码段: Category.java(setter和getter)

    public class Category {
        private int _id;
        private String _name;
    
        public Category() {
    
        }
    
        public Category(int id, String name) {
            this._id = id;
            this._name = name;
        }
    
        public Category(String name) {
            this._name = name;
        }
    
        public int getID() {
            return this._id;
        }
        public void setID(int id) {
            this._id = id;
        }
    
        public String get_name()
        {
            return this._name;
        }
        public void set_name(String name)
        {
            this._name = name;
        }
    
    
    }
    

    CategoryListAdapter.java

    public class CategoryListAdapter extends BaseAdapter {
        private ArrayList<Category> listData;
        private LayoutInflater layoutInflater;
    
        public CategoryListAdapter(Context aContext, ArrayList<Category> listData) {
            this.listData = listData;
            layoutInflater = LayoutInflater.from(aContext);
        }
    
        @Override
        public int getCount() {
            return listData.size();
        }
    
        @Override
        public Object getItem(int position) {
            return listData.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        public View getView(int position, View convertView, ViewGroup parent) {
            CategoryListAdapter.ViewHolder holder;
            if (convertView == null) {
                convertView = layoutInflater.inflate(R.layout.listview_category, null);
                holder = new CategoryListAdapter.ViewHolder();
                holder.btnCategory = (Button) convertView.findViewById(R.id.btnCategory);
    
                convertView.setTag(holder);
            } else {
                holder = (CategoryListAdapter.ViewHolder) convertView.getTag();
            }
    
            holder.btnCategory.setText(listData.get(position).get_name());
    
            return convertView;
        }
    
        static class ViewHolder {
            Button btnCategory;
        }
    }
    

    listview_category.xml(将重复的布局)

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
            android:textStyle="bold"
            android:textSize="16dp"
            android:id="@+id/btnCategory"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:background="@drawable/button_category"/>
    
    </LinearLayout>
    
    MainActivity中的

    listview

    <ListView
            android:id="@+id/listviewCategory"
            android:layout_margin="10dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        </ListView>
    

    MainActivity中的java

    protected void onCreate(Bundle savedInstanceState) {
    ...
    /* LIST CATEGORY TO LOAD PRODUCT */
            ArrayList list_category = getListCategory();
            final ListView listview_category = (ListView) findViewById(R.id.listviewCategory);
            listview_category.setAdapter(new CategoryListAdapter(this, list_category));
    listview_category.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> a, View v, int position,
                                        long id) {
                    Log.d(TAG, "click cat");
                    //Give product list an id from category_id get from here
                }
            });
    ...
    }
    
    /* List Category for selecting category product */
        private ArrayList getListCategory() {
            SQLiteDatabase mydatabase = openOrCreateDatabase("posDb",MODE_PRIVATE,null);
            Cursor resultSet = mydatabase.rawQuery("Select * from categories",null);
    
            ArrayList<Category> results = new ArrayList<Category>();
            if (resultSet.moveToFirst()) {
                do {
                    Category categoriesData = new Category();
                    categoriesData.set_name(resultSet.getString(1));
                    results.add(categoriesData);
                } while (resultSet.moveToNext());
            }
            return results;
        }
    

    产品网格与类别大致相同,但是从数据库加载产品后来我想点击产品按钮将记录保存到购物车表

2 个答案:

答案 0 :(得分:1)

on Click on按钮会将产品ID添加到table_cart

  1. MainActivity.java

    公共类MainActivity扩展了AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       // ArrayList list_category = getListCategory();
    
        int id[]={1, 2, 3, 4, 5};
        String categoryName[]={"category1","category2","category3","category4","category5"};
        ArrayList<Category> listData=new ArrayList<>();
        Category category;
        for (int i=0; i<id.length; i++)
        {
            category=new Category();
            category.set_id(id[i]);// setting Id
            category.set_name(categoryName[i]);// setting category name
            listData.add(category);
        }
        final ListView listview_category = (ListView) findViewById(R.id.listviewCategory);
        listview_category.setAdapter(new CategoryListAdapter(this, listData ));
    
    }
    

    }

  2. CategoryListAdapter.java

    公共类CategoryListAdapter扩展BaseAdapter {     private ArrayList listData;     private LayoutInflater layoutInflater;     ArrayList table_cart = new ArrayList();     private static final String TAG =“CategoryListAdapter”;

    public CategoryListAdapter(Context aContext, ArrayList<Category> listData) {
        this.listData = listData;
        layoutInflater = LayoutInflater.from(aContext);
    }
    
    @Override
    public int getCount() {
        return listData.size();
    }
    
    @Override
    public Object getItem(int position) {
        return listData.get(position);
    }
    
    @Override
    public long getItemId(int position) {
        return position;
    }
    
    public View getView(final int position, View convertView, ViewGroup parent) {
        final CategoryListAdapter.ViewHolder holder;
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.listview_category, null);
            holder = new CategoryListAdapter.ViewHolder();
            holder.btnCategory = (Button) convertView.findViewById(R.id.btnCategory);
    
    
            convertView.setTag(holder);
        } else {
            holder = (CategoryListAdapter.ViewHolder) convertView.getTag();
        }
    
        holder.btnCategory.setText(listData.get(position).get_name());
    
        holder.btnCategory.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                // getting product id
                int product_id = listData.get(position).getID();
                Log.e(TAG, "product_id: " + product_id);
    
                // now you can get category name as well
                String category_name = listData.get(position).get_name();
                Log.e(TAG, "category_name: " + category_name);
    
                // now adding product id in to table_cart
                table_cart.add(listData.get(position).getID());
            }
        });
    
        return convertView;
    }
    
    static class ViewHolder {
        Button btnCategory;
    }
    

    }

  3. Category.java

    公共类别{     private int _id;     private String _name;

    public int getID() {
        return this._id;
    }
    
    public void setID(int id) {
        this._id = id;
    }
    
    public String get_name() {
        return this._name;
    }
    
    public void set_name(String name) {
        this._name = name;
    }
    
    public void set_id(int _id) {
        this._id = _id;
    }
    

    }

  4. 无需更改布局

答案 1 :(得分:0)

添加类别按钮的单击侦听器,在片段中添加网格视图并在按钮单击时打开片段。

 holder.btnCategory.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ProductFragment nextFrag= new ProductFragment();
 this.getFragmentManager().beginTransaction()
 .replace(R.id.Layout_container, nextFrag,TAG_FRAGMENT)
 .commit();
        }
    });