Java 如何在listview中保存二维码扫描结果?
在条形码部分,我阅读了条形码。我想将扫描结果保存到我创建的列表视图中。我试着通过看很多项目来做到这一点,但我失败了。你能帮助我吗?如果问题有点长,我很抱歉Java 如何在listview中保存二维码扫描结果?,java,android,listview,qr-code,Java,Android,Listview,Qr Code,在条形码部分,我阅读了条形码。我想将扫描结果保存到我创建的列表视图中。我试着通过看很多项目来做到这一点,但我失败了。你能帮助我吗?如果问题有点长,我很抱歉 public class BarcodeReaderFragment extends Fragment { barcodeDetector.setProcessor(new Detector.Processor<Barcode>() { @Override public void release() {
public class BarcodeReaderFragment extends Fragment {
barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
@Override
public void release() {
}
@Override
public void receiveDetections(Detector.Detections<Barcode> detections) {
final SparseArray<Barcode> qrcode = detections.getDetectedItems();
if (qrcode.size() != 0) {
Intent my = new Intent(getActivity(),ResultActivity.class);
my.putExtra("type", qrcode.valueAt(0));
currentTime = Calendar.getInstance().getTime();
df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(currentTime);
String d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
System.out.println(formattedDate);
//Add QR scan result to listview???
//Add current time and date to listview???
Gson gson = new Gson();
String json = gson.toJson(qrcode.valueAt(0));
SharedPreferences sp = getActivity().getSharedPreferences("list",Context.MODE_PRIVATE);
addhistory(sp,json);
startActivity(my);
getActivity().finish();
barcodeDetector.release();
}
}
});
public void addhistory(SharedPreferences sp,String json){
int x = sp.getInt("index",0);
SharedPreferences.Editor editor = sp.edit();
editor.putString(String.valueOf(x),json);
int y;
y = x+1;
editor.putInt("index",y);
editor.commit();
}
ListView\u适配器
public class ListView_Adapter extends BaseAdapter {
private Context context;
private ArrayList<Item_Model> item_modelArrayList;
private SparseBooleanArray mSelectedItemsIds;
public ListView_Adapter(Context context, ArrayList<Item_Model> item_modelArrayList) {
this.context = context;
this.item_modelArrayList = item_modelArrayList;
mSelectedItemsIds = new SparseBooleanArray();
}
@Override
public int getCount() {
return item_modelArrayList.size();
}
@Override
public Item_Model getItem(int position) {
return item_modelArrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_row, parent, false);
holder = new ViewHolder();
holder.Result = (TextView) convertView.findViewById(R.id.result);
holder.Date_time = (TextView) convertView.findViewById(R.id.date_time);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.Result.setText(item_modelArrayList.get(position).getResult());
holder.Date_time.setText(item_modelArrayList.get(position).getDate_time());
/** Change background color of the selected items in list view **/
convertView
.setBackgroundColor(mSelectedItemsIds.get(position) ? 0x48FF9800
: Color.TRANSPARENT);
return convertView;
}
private class ViewHolder {
TextView Result, Date_time;
}
公共类ListView\u适配器扩展了BaseAdapter{
私人语境;
私有ArrayList项_modelArrayList;
专用SparseBooleanArray MSelectEditEMSID;
公共ListView_适配器(上下文上下文,ArrayList项_modelArrayList){
this.context=上下文;
this.item_modelArrayList=item_modelArrayList;
mSelectedItemsIds=new SparseBooleanArray();
}
@凌驾
public int getCount(){
返回项_modelArrayList.size();
}
@凌驾
公共项目\模型getItem(内部位置){
返回项目_modelArrayList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视窗座;
if(convertView==null){
convertView=充气机。充气(R.layout.item_行,父项,false);
holder=新的ViewHolder();
holder.Result=(TextView)convertView.findViewById(R.id.Result);
holder.Date\u time=(TextView)convertView.findViewById(R.id.Date\u time);
convertView.setTag(支架);
}否则
holder=(ViewHolder)convertView.getTag();
holder.Result.setText(item_modelArrayList.get(position.getResult());
holder.Date\u time.setText(item\u modelArrayList.get(position.getDate\u time());
/**更改列表视图中选定项目的背景色**/
convertView
.setBackgroundColor(mSelectedItemsIds.get(位置)?0x48FF9800
:颜色(透明);
返回视图;
}
私有类视窗持有者{
文本查看结果、日期和时间;
}
ThreeFragment在本集中,我正在观看Listview
private ActionMode mActionMode;
private static View view;
private static ListView_Adapter adapter;
private static ListView listView;
//Action Mode for toolbar
private static ArrayList<Item_Model> item_models;
public ThreeFragment() {
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_three, container, false);
populateListView();
implementListViewClickListeners();
return view;
}
//I don't know how to fill this section with detector results?
//Populate ListView with dummy data
private void populateListView() {
listView = (ListView) view.findViewById(R.id.list_view);
item_models = new ArrayList<>();
for (int i = 1; i <= 40; i++)
item_models.add(new Item_Model("Result " + i, "Date-Time " + i));
adapter = new ListView_Adapter(getActivity(), item_models);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
//Implement item click and long click over listview
private void implementListViewClickListeners() {
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//If ActionMode not null select item
if (mActionMode != null)
onListItemSelect(position);
}
});
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
//Select item on long click
onListItemSelect(position);
return true;
}
});
}
//List item select method
private void onListItemSelect(int position) {
adapter.toggleSelection(position);//Toggle the selection
boolean hasCheckedItems = adapter.getSelectedCount() > 0;//Check if any items are already selected or not
if (hasCheckedItems && mActionMode == null)
// there are some selected items, start the actionMode
mActionMode = ((AppCompatActivity) getActivity()).startSupportActionMode(new Toolbar_ActionMode_Callback(getActivity(),adapter, item_models, true));
else if (!hasCheckedItems && mActionMode != null)
// there no selected items, finish the actionMode
mActionMode.finish();
if (mActionMode != null)
//set action mode title on item selection
mActionMode.setTitle(String.valueOf(adapter
.getSelectedCount()) + " selected");
}
//Set action mode null after use
public void setNullToActionMode() {
if (mActionMode != null)
mActionMode = null;
}
//Delete selected rows
public void deleteRows() {
SparseBooleanArray selected = adapter
.getSelectedIds();//Get selected ids
//Loop all selected ids
for (int i = (selected.size() - 1); i >= 0; i--) {
if (selected.valueAt(i)) {
//If current id is selected remove the item via key
item_models.remove(selected.keyAt(i));
adapter.notifyDataSetChanged();//notify adapter
}
}
Toast.makeText(getActivity(), selected.size() + " item deleted.", Toast.LENGTH_SHORT).show();//Show Toast
mActionMode.finish();//Finish action mode after use
}
private ActionMode mActionMode;
私有静态视图;
专用静态ListView_适配器;
私有静态ListView ListView;
//工具栏的操作模式
私有静态ArrayList项_模型;
公共服务{
}
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment_three,容器,假);
populateListView();
实现ListViewClickListeners();
返回视图;
}
//我不知道如何用检测器结果填充这一部分?
//用虚拟数据填充ListView
私有void populateListView(){
listView=(listView)view.findViewById(R.id.list\u视图);
item_models=新的ArrayList();
for(int i=1;i父项、视图、int位置、长id){
//长按选择项目
onListItemSelect(位置);
返回true;
}
});
}
//列表项选择方法
私有void onListItemSelect(内部位置){
adapter.toggleSelection(位置);//切换选择
boolean hasCheckedItems=adapter.getSelectedCount()>0;//检查是否已选择任何项
if(hasCheckedItems&&mActionMode==null)
//有一些选定的项目,请启动actionMode
mActionMode=((AppCompatActivity)getActivity()).startSupportActionMode(新工具栏\u操作模式\u回调(getActivity(),适配器,项\u模型,true));
如果(!hasCheckedItems&&mActionMode!=null),则为else
//如果没有选定的项目,请完成操作模式
mActionMode.finish();
if(mActionMode!=null)
//在项目选择上设置操作模式标题
mActionMode.setTitle(字符串.valueOf(适配器
.getSelectedCount())+“selected”);
}
//使用后将操作模式设置为空
public void setNullToActionMode(){
if(mActionMode!=null)
mActionMode=null;
}
//删除所选行
公共void deleteRows(){
SparseBooleanArray selected=适配器
.getSelectedIds();//获取所选ID
//循环所有选定的ID
对于(int i=(selected.size()-1);i>=0;i--){
如果(选定。值位于(i)){
//如果选择了当前id,则通过键删除该项目
项目_模型。移除(选定。键入(i));
adapter.notifyDataSetChanged();//通知适配器
}
}
Toast.makeText(getActivity(),selected.size()+“item deleted.”,Toast.LENGTH_SHORT.show();//show Toast
mActionMode.finish();//使用后完成操作模式
}
尝试按以下步骤实施:
结果活动保持为登录/父活动
ThreeFragment
添加到ResultActivity
BarcodeReaderActivity
并直接在此活动中使用BarcodeDetector
(为了简单起见,请删除BarcodeReaderFragment
)startActivityForResult()
从ThreeFragment
启动BarcodeReaderActivity
BarcodeDetector
获取结果时,然后使用setResult(“xxxxxx”)
和finish()
活动将结果设置为BarcodeReaderActivity
ThreeFragment
中,您将在onActivityResult()中获得结果
列表
,并将列表发送到适配器
和notifyDataSetChanged()
private ActionMode mActionMode;
private static View view;
private static ListView_Adapter adapter;
private static ListView listView;
//Action Mode for toolbar
private static ArrayList<Item_Model> item_models;
public ThreeFragment() {
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_three, container, false);
populateListView();
implementListViewClickListeners();
return view;
}
//I don't know how to fill this section with detector results?
//Populate ListView with dummy data
private void populateListView() {
listView = (ListView) view.findViewById(R.id.list_view);
item_models = new ArrayList<>();
for (int i = 1; i <= 40; i++)
item_models.add(new Item_Model("Result " + i, "Date-Time " + i));
adapter = new ListView_Adapter(getActivity(), item_models);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
//Implement item click and long click over listview
private void implementListViewClickListeners() {
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//If ActionMode not null select item
if (mActionMode != null)
onListItemSelect(position);
}
});
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
//Select item on long click
onListItemSelect(position);
return true;
}
});
}
//List item select method
private void onListItemSelect(int position) {
adapter.toggleSelection(position);//Toggle the selection
boolean hasCheckedItems = adapter.getSelectedCount() > 0;//Check if any items are already selected or not
if (hasCheckedItems && mActionMode == null)
// there are some selected items, start the actionMode
mActionMode = ((AppCompatActivity) getActivity()).startSupportActionMode(new Toolbar_ActionMode_Callback(getActivity(),adapter, item_models, true));
else if (!hasCheckedItems && mActionMode != null)
// there no selected items, finish the actionMode
mActionMode.finish();
if (mActionMode != null)
//set action mode title on item selection
mActionMode.setTitle(String.valueOf(adapter
.getSelectedCount()) + " selected");
}
//Set action mode null after use
public void setNullToActionMode() {
if (mActionMode != null)
mActionMode = null;
}
//Delete selected rows
public void deleteRows() {
SparseBooleanArray selected = adapter
.getSelectedIds();//Get selected ids
//Loop all selected ids
for (int i = (selected.size() - 1); i >= 0; i--) {
if (selected.valueAt(i)) {
//If current id is selected remove the item via key
item_models.remove(selected.keyAt(i));
adapter.notifyDataSetChanged();//notify adapter
}
}
Toast.makeText(getActivity(), selected.size() + " item deleted.", Toast.LENGTH_SHORT).show();//Show Toast
mActionMode.finish();//Finish action mode after use
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser && isResumed()) {
//this fragment is visible now, do your expected code here
} else {
//this fragment is not visible now, do your expected code here
}
}
@Override
public void onResume() {
super.onResume();
if(getUserVisibleHint()){
//this fragment is visible now, do your expected code here
} else {
//this fragment is not visible now, do your expected code here
}
}