如何将项目添加到列表视图(对于重复项增加数量)并在以下活动中查看?



我有一个包含项目的网格视图,每个项目都有一个名称和数量。当我单击 gridView 中的项目时,我想将项目和数量添加到同一活动中的动态列表视图中。如果我多次单击该项目,则应增加动态列表视图中的项目数量(不允许重复项目。这是我当前的 gridView,我已经删除了添加的代码和之前失败的列表视图,我现在只是举杯庆祝:

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

这是单击网格视图的签出片段的代码。

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

你需要更好地解释情况。现在,我假设您的问题是项目正在复制第二个列表而不是附加计数。为此,没有 单线解决方案。您需要做的是在网格中选择某个项目后,搜索第二个列表中是否存在该项。在这种情况下,请更新数量,否则将其添加到列表中。由于您的第二个列表基于表,因此您必须执行 2 个查询。一个用于标识项目是否已存在(选择查询(,另一个用于更改值(插入或更新查询(。如果我误解了,请纠正我,以便我更好地帮助您。

为什么不在 GridView getItem(..( 方法中返回模型类而不是"字符串",它应该像这样工作

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
}

最新更新