Java Android Studio:带ArrayAdapter的ListView,访问数据库数据
我正在对话框中使用listView,希望显示数据库表中的数据。我拥有的数据没有显示在listview中。我正在将arrayAdapter与listView一起使用。此外,ShowOrder对话框显示两次,因为im使用2个recyclerView和一个适配器。有没有解决这两个问题的办法 有序碎片Java Android Studio:带ArrayAdapter的ListView,访问数据库数据,java,android,Java,Android,我正在对话框中使用listView,希望显示数据库表中的数据。我拥有的数据没有显示在listview中。我正在将arrayAdapter与listView一起使用。此外,ShowOrder对话框显示两次,因为im使用2个recyclerView和一个适配器。有没有解决这两个问题的办法 有序碎片 package com.example.foodtruck.Fragments.Vendor; import android.app.AlertDialog; import android.content
package com.example.foodtruck.Fragments.Vendor;
import android.app.AlertDialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.res.ResourcesCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.foodtruck.Adapter.ListViewAdapter;
import com.example.foodtruck.Adapter.OrderAdapter;
import com.example.foodtruck.DataBase.ItemsContract;
import com.example.foodtruck.DataBase.OrdersContract;
import com.example.foodtruck.DataBase.VendorsContract;
import com.example.foodtruck.Models.Item;
import com.example.foodtruck.Models.Order;
import com.example.foodtruck.Models.OrderedItem;
import com.example.foodtruck.Models.Vendor;
import com.example.foodtruck.R;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class OrderFragment extends Fragment implements OrderAdapter.OnOrderListener, View.OnClickListener {
private RecyclerView pendingRecyclerView;
private RecyclerView completedRecyclerView;
private RecyclerView.Adapter recyclerAdapter;
private RecyclerView.Adapter recyclerAdapter2;
private OrderAdapter pendingOrderAdapter;
private OrderAdapter CompletedOrderAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private RecyclerView.LayoutManager mLayoutManager2;
private SharedPreferences sharedPref;
private Order order;
private LayoutInflater dialogInflater;
private ArrayList<Order> pendingOrderList = new ArrayList<>();
private ArrayList<Order> completedOrderList = new ArrayList<>();
private ListView listView;
private List<OrderedItem> mOrderedItems;
private ListViewAdapter listAdapter;
View dv;
private TextView customerName;
private Spinner statusSpinner;
private Pattern p;
private Matcher m;
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_orders, container, false);
sharedPref = getActivity().getSharedPreferences("KeyData", Context.MODE_PRIVATE);
//first recycler
pendingRecyclerView = v.findViewById(R.id.pendingRecycler);
pendingRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getContext()); //use linear layout on cards
pendingRecyclerView.setLayoutManager(mLayoutManager);
pendingOrderAdapter = new OrderAdapter(getContext(), this);
pendingOrderAdapter.submitList(getOrderList("Preparing"));
recyclerAdapter = pendingOrderAdapter;//specify adapter and pass in item list
pendingRecyclerView.setAdapter(recyclerAdapter);
//second recycler
completedRecyclerView = v.findViewById(R.id.completedRecycler);
completedRecyclerView.setHasFixedSize(true);
mLayoutManager2 = new LinearLayoutManager(getContext());
completedRecyclerView.setLayoutManager(mLayoutManager2);
CompletedOrderAdapter = new OrderAdapter(getContext(), this);
CompletedOrderAdapter.submitList(getOrderList("Completed"));
recyclerAdapter2 = CompletedOrderAdapter;
completedRecyclerView.setAdapter(recyclerAdapter2);
return v;
}
//need two arrayList, orderPending and orderComplete
//get order list from order database
public ArrayList<Order> getOrderList(String status) {
String email = sharedPref.getString("Email", "");
VendorsContract vc = new VendorsContract(getContext());
OrdersContract oc = new OrdersContract(getContext());
Vendor vendor = vc.getVendorIdByEmail(email);
switch (status)
{
case "Preparing":
pendingOrderList = oc.getOrderListByStatus(vendor.getM_Id(), status); //vendor = 3 status = preparing
return pendingOrderList;
case "Completed":
completedOrderList = oc.getOrderListByStatus(vendor.getM_Id(), status);
return completedOrderList;
}
return null;
}
@Override
public void onClick(View v) {
}
@Override
public void onPendingOrderClick(int position) {
}
@Override
public void onCompletedOrderClick(int position)
{
showOrderDialog(CompletedOrderAdapter.getOrderAt(position));
}
//show order dialog
private void showOrderDialog(Order order)
{
dialogInflater = getLayoutInflater();
dv = dialogInflater.inflate(R.layout.dialog_show_order, null);
//ListView
listView = dv.findViewById(R.id.itemsInOrder);
listView.setAdapter(listAdapter);
customerName = dv.findViewById(R.id.tvCustomerName);
statusSpinner = dv.findViewById(R.id.statusSpinner);
int selection = ((order.getM_Status().equals("Preparing")) ? 0 : 1);
customerName.setText(order.getM_Customer().getM_FirstName()+order.getM_Customer().getM_LastName());
statusSpinner.setSelection(selection);
final AlertDialog alertDialog = new AlertDialog.Builder(getContext()).setView(dv)
.setPositiveButton("Update", null)
.setNegativeButton("Cancel", null)
.show();
Button b = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
b.setOnClickListener(v -> {
if (updateOrderInDatabase(order)) {
pendingOrderAdapter.submitList(getOrderList("Preparing"));
CompletedOrderAdapter.submitList(getOrderList("Completed"));
alertDialog.cancel();
Toast.makeText(getContext(),"Order Updated", Toast.LENGTH_LONG).show();
}
});
}
private boolean updateOrderInDatabase(Order order) {
//references to all Dialog views
customerName = dv.findViewById(R.id.tvCustomerName);
statusSpinner = dv.findViewById(R.id.statusSpinner);
if (validateCustomerName(customerName)) {
OrdersContract oc = new OrdersContract(getContext());
oc.updateOrder(order.getM_Id(), statusSpinner.getSelectedItem().toString());
return true;
}
return false;
}
private boolean validateCustomerName(TextView customerName) {
p = Pattern.compile("[a-zA-Z]", Pattern.CASE_INSENSITIVE);
m = p.matcher(customerName.getText().toString());
boolean cv = m.find();
String name = customerName.getText().toString();
if (TextUtils.isEmpty(name)) {
customerName.setError("Can Not Be Empty ");
return false;
} else if (!cv) {
customerName.setError("Invalid Entry (Only Letters)");
return false;
}
return true;
}
}
package com.example.foodtruck.Fragments.Vendor;
导入android.app.AlertDialog;
导入android.content.Context;
导入android.content.SharedReferences;
导入android.graphics.Bitmap;
导入android.graphics.drawable.BitmapDrawable;
导入android.graphics.drawable.drawable;
导入android.os.Bundle;
导入android.text.TextUtils;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListAdapter;
导入android.widget.ListView;
导入android.widget.RadioGroup;
导入android.widget.Spinner;
导入android.widget.TextView;
导入android.widget.Toast;
导入androidx.annotation.NonNull;
导入androidx.annotation.Nullable;
导入androidx.core.content.res.ResourcesCompat;
导入androidx.fragment.app.fragment;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入com.example.foodtruck.Adapter.ListViewAdapter;
导入com.example.foodtruck.Adapter.OrderAdapter;
导入com.example.foodtruck.DataBase.ItemsContract;
导入com.example.foodtruck.DataBase.OrdersContract;
导入com.example.foodtruck.DataBase.VendorsContract;
导入com.example.foodtruck.Models.Item;
导入com.example.foodtruck.Models.Order;
导入com.example.foodtruck.Models.OrderedItem;
导入com.example.foodtruck.Models.Vendor;
导入com.example.foodtruck.R;
导入java.io.ByteArrayOutputStream;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类OrderFragment扩展片段实现OrderAdapter.OnOrderListener、View.OnClickListener{
私人回收视图pendingRecyclerView;
私人RecyclerView completedRecyclerView;
专用回收器查看适配器回收器适配器;
专用回收器查看适配器回收器适配器2;
私有OrderAdapter pendingOrderAdapter;
专用OrderAdapter CompletedOrderAdapter;
private RecyclerView.LayoutManager MLLayoutManager;
private RecyclerView.LayoutManager MLAyoutManager 2;
私人SharedReferences SharedRef;
私人秩序;
私人充气机;
私有ArrayList pendingOrderList=新ArrayList();
私有ArrayList completedOrderList=新ArrayList();
私有列表视图列表视图;
私人名单;
私有ListViewAdapter listAdapter;
查看dv;
私有文本视图客户名称;
私有微调器状态微调器;
私有模式p;
私有匹配器m;
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图v=充气机。充气(R.layout.fragment_orders,container,false);
sharedPref=getActivity().GetSharedReferences(“KeyData”,Context.MODE\u PRIVATE);
//第一回收商
pendingRecyclerView=v.findViewById(R.id.PendingRecyclerer);
pendingRecyclerView.setHasFixedSize(true);
mLayoutManager=newlinearlayoutmanager(getContext());//在卡片上使用线性布局
pendingRecyclerView.setLayoutManager(MLLayoutManager);
pendingOrderAdapter=newOrderAdapter(getContext(),this);
pendingOrderAdapter.提交列表(getOrderList(“准备”);
recyclerAdapter=pendingOrderAdapter;//指定适配器并传入项列表
pendingRecyclerView.setAdapter(回收适配器);
//第二回收商
completedRecyclerView=v.findViewById(R.id.CompletedRecyclerer);
completedRecyclerView.setHasFixedSize(true);
mLayoutManager2=新的LinearLayoutManager(getContext());
completedRecyclerView.setLayoutManager(mLayoutManager2);
CompletedOrderAdapter=新的OrderAdapter(getContext(),this);
CompletedOrderAdapter.submitList(getOrderList(“Completed”);
recyclerAdapter2=已完成的OrderAdapter;
completedRecyclerView.setAdapter(recyclerAdapter2);
返回v;
}
//需要两个arrayList,orderPending和orderComplete
//从订单数据库获取订单列表
公共ArrayList getOrderList(字符串状态){
String email=sharedPref.getString(“email”,“电子邮件”);
VendorsContract vc=新的VendorsContract(getContext());
OrdersContract oc=新的OrdersContract(getContext());
Vendor=vc.getvendoridbymail(电子邮件);
开关(状态)
{
案例“准备”:
pendingOrderList=oc.getOrderListByStatus(vendor.getM_Id(),status);//vendor=3 status=preparing
返回pendingOrderList;
案件“已完成”:
completedOrderList=oc.getOrderListByStatus(vendor.getM_Id(),status);
返回完整的订单列表;
}
返回null;
}
@凌驾
公共void onClick(视图v){
}
@凌驾
公共作废待处理或单击(内部位置){
}
@凌驾
已完成订单点击时的公共作废(整数位置)
{
showOrderDialog(CompletedOrderAdapter.getOrderAt(位置));
}
//显示订单对话框
专用void showOrderDialog(订单)
{
dialogInflater=GetLayoutFlater();
dv=dialogInflater.inflate(R.layout.dialog\u show\u order,null);
//列表视图
listView=dv.findviewbyd(R.id.itemsInOrder);
setAdapter(listAdapter);
customerName=dv.findviewbyd(R.id.tvCustomerName);
statusSpinner=dv.findViewById(R.id.statusSpinner);
int selection=((order.getM_Status().equals(“Preparing”))?0:1
package com.example.foodtruck.Adapter;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.example.foodtruck.DataBase.OrderedItemsContract;
import com.example.foodtruck.Models.OrderedItem;
import com.example.foodtruck.R;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class ListViewAdapter extends ArrayAdapter<OrderedItem>{
ArrayList<OrderedItem> orderedItems;
public ListViewAdapter(Context context, ArrayList<OrderedItem> mOrderedItems)
{
super(context, 0);
orderedItems = mOrderedItems;
}
static class LayoutHandler{
TextView items, quantity;
}
@Override
public int getCount() {
return orderedItems.size();
}
@Override
public OrderedItem getItem(int position) {
return orderedItems.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View mview = convertView;
LayoutHandler layoutHandler;
if(mview==null)
{
LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mview = layoutInflater.inflate(R.layout.listview_layout, parent, false);
layoutHandler = new LayoutHandler();
layoutHandler.items = mview.findViewById(R.id.tvItem);
layoutHandler.quantity = mview.findViewById((R.id.tvQuantity));
mview.setTag(layoutHandler);
}
else
{
layoutHandler = (LayoutHandler) mview.getTag();
}
OrderedItem orderedItem = (OrderedItem) this.getItem(position);
layoutHandler.items.setText(orderedItem.getM_Item().toString());
layoutHandler.quantity.setText(orderedItem.getM_Quantity());
return mview;
}
}