Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在listview中保存二维码扫描结果?_Java_Android_Listview_Qr Code - Fatal编程技术网

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