Как добавить элементы в список (для увеличения количества дубликатов) и просмотреть в следующем упражнении? - PullRequest
0 голосов
/ 08 октября 2019

У меня есть gridView, в котором есть элементы, у каждого элемента есть имя и количество. Когда я щелкаю элемент в gridView, я хотел бы добавить элемент и количество в динамический список, который находится в том же действии. Если я нажимаю на элемент несколько раз, количество элементов в динамическом listView должно быть увеличено (повторяющиеся элементы не допускаются.) Это мой текущий gridView, я удалил код, который добавляет, и предыдущий listView, который потерпел неудачу, и яимея только один тост:

    public class GridviewAdapter extends BaseAdapter
{
    private ArrayList<String> listItem;
    private ArrayList<Integer> listPicture;
    private Activity activity;

    public GridviewAdapter(Activity activity, ArrayList<String> listItem, ArrayList<Integer> listPicture) {
        super();
        this.listItem = listItem;
        this.listPicture = listPicture;
        this.activity = activity;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return listItem.size();
    }

    @Override
    public String getItem(int position) {
        // TODO Auto-generated method stub
        return listItem.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    public static class ViewHolder
    {
        public ImageView itemPicture;
        public TextView itemName;
        public TextView itemPrice;
        public TextView itemStock;
        public TextView itemAvailability;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup 
 parent) {
        // TODO Auto-generated method stub
        ViewHolder view;
        LayoutInflater inflator = activity.getLayoutInflater();

        if(convertView==null)
        {
            view = new ViewHolder();
            convertView = inflator.inflate(R.layout.item_grid_row, 
 null);

            view.itemName = (TextView) 
convertView.findViewById(R.id.itemName);
            view.itemPrice = (TextView) 
convertView.findViewById(R.id.itemPrice);
            view.itemStock = (TextView) 
convertView.findViewById(R.id.itemStock);
            view.itemAvailability = (TextView) 
convertView.findViewById(R.id.itemAvailability);
            view.itemPicture = (ImageView) 
convertView.findViewById(R.id.itemPicture);

            convertView.setTag(view);
        }
        else
        {
            view = (ViewHolder) convertView.getTag();
        }

        view.itemName.setText(listItem.get(position));
       // view.itemPicture.setImageDrawable(listItem.get(position));

        return convertView;
    }

}

это код фрагмента оформления, где щелкает gridView.

    public class CheckoutFragment extends Fragment {

    private CheckoutViewModel checkoutViewModel;
    private EditText editText1;

    private GridviewAdapter mAdapter;
    private ArrayList<String> listItem;
    private ArrayList<Integer> listPicture;
    private GridView gridView;

    DBHelper db;

    LinearLayout layout_total, layout_grid;

    private Button sum;


    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle 
savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_checkout, 
 container, false);

        db = new DBHelper(getActivity());

        Display display = 
getActivity().getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = size.x;
        int height = size.y;
        editText1 = (EditText)root.findViewById(R.id.editText1);
        editText1.setHeight(height/12);
        editText1.setShowSoftInputOnFocus(false);
        editText1.setFocusable(false);

        editText1.setTextColor(Color.parseColor("#FFFFFF"));
        editText1.setHintTextColor(Color.parseColor("#FFFFFF"));

editText1.getBackground().setColorFilter(Color.parseColor("#008577"), 
PorterDuff.Mode.SRC_ATOP);

        editText1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent cart = new Intent(getActivity(), 
CartActivity.class);
                startActivity(cart);
            }
        });

        prepareList();
        // prepared arraylist and passed it to the Adapter class
        mAdapter = new GridviewAdapter(getActivity(),db.getAll(), 
listPicture);

        // Set custom adapter to gridview
        gridView = (GridView)root.findViewById(R.id.gridView1);
        gridView.setAdapter(mAdapter);

        // Implement On Item click listener
        gridView.setOnItemClickListener(new 
AdapterView.OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int 
position,
                                    long arg3) {
//this is where the grid is clicked and items added to dynamic listView
                Toast.makeText(getActivity(), 
mAdapter.getItem(position), Toast.LENGTH_SHORT).show();
            }
        });

        return root;
    }

    public void prepareList() {
        // listItem = new ArrayList<String>();

        db = new DBHelper(getActivity());
        List<Item> listItem = new ArrayList<>();

        listItem =  db.getAllItems(db.ITEMS_TABLE_NAME);
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.main, menu);
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch(item.getItemId()) {
            case R.id.action_add_customer:
                //startActivity(getActivity(), 
NewCustomerActivity.class);
                Intent newCustomer = new Intent(getActivity(), 
NewCustomerActivity.class);
                startActivity(newCustomer);
                return true;
           /* case R.id.action_add_customer:
                return true;*/
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

1 Ответ

0 голосов
/ 08 октября 2019

Вы должны объяснить ситуацию немного лучше. Сейчас я предполагаю, что ваша проблема в том, что элементы дублируют второй список, а не добавляют количество. Для этого не существует единого решения. Что вам нужно сделать, это как только элемент выбран в сетке, поиск, если он существует во втором списке. В этом случае обновите количество, в противном случае добавьте его в список. Поскольку ваш второй список основан на таблице, вы должны выполнить 2 запроса. Один для определения, если элемент уже существует (Выберите Запрос), а другой для изменения значения (Вставить или Обновить запрос). Если я неправильно понял, поправьте меня, чтобы я мог помочь вам лучше.

Почему бы вам не вернуть класс модели в вашем методе GridView getItem (..) вместо 'String', он должен работать следующим образом

public class GridviewAdapter extends BaseAdapter
{
    ArrayList<GridModel> gridItems;
    //Constructor
    public GridviewAdapter(Activity activity, ArrayList<GridModel> gridItems) {
        super();
        this.gridItems = gridItems;
        this.activity = activity;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return griditems.size();
    }

    @Override
    public GridModel getItem(int position) {
        // TODO Auto-generated method stub
        return gridItems.get(position);
    }

    //...add your getView...

}

//GridModel Should be Like So..
class GridModel {
    public String itemPicture;
    public String itemName;
    public String itemPrice;
    public String itemStock;
    public String itemAvailability;

    //or use private variables with getter-setter methods
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...