在Android中的expandablelistview中更新zxing条形码结果
我的应用程序中有自定义的ExpandableListVitiView,如果我单击子视图(textview),它将调用zxing条形码进行扫描,然后我尝试从中获取结果并将其设置到子视图(textview),但我无法从中获取结果。请检查下面的代码,我已经尝试过了,请帮助我 活动:在Android中的expandablelistview中更新zxing条形码结果,android,expandablelistview,expandablelistadapter,Android,Expandablelistview,Expandablelistadapter,我的应用程序中有自定义的ExpandableListVitiView,如果我单击子视图(textview),它将调用zxing条形码进行扫描,然后我尝试从中获取结果并将其设置到子视图(textview),但我无法从中获取结果。请检查下面的代码,我已经尝试过了,请帮助我 活动: public class ScanningActivity extends Activity { Button btn_ScanningPOBack,ScanningPO_btn_TitleBar,btn_Sca
public class ScanningActivity extends Activity
{
Button btn_ScanningPOBack,ScanningPO_btn_TitleBar,btn_ScanningPO_Back,btn_ScanningPO_Next;
TextView txt_scanning_UserName,txt_scanning_ClientName;
AlertDialog dialog_GoToBack;
ScanningListAdapter scanlistAdapter;
ExpandableListView expandableScanning;
List<ItemScanHeader> ScanGroupHeader;
HashMap<ItemScanHeader, List<ChildScanItem>> ScanlistDataChild;
DB_Operations dbo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scanning);
btn_ScanningPOBack=(Button)findViewById(R.id.btn_ScanningPOBack);
ScanningPO_btn_TitleBar=(Button)findViewById(R.id.ScanningPO_btn_TitleBar);
btn_ScanningPO_Back=(Button)findViewById(R.id.btn_ScanningPO_Back);
btn_ScanningPO_Next=(Button)findViewById(R.id.btn_ScanningPO_Next);
txt_scanning_UserName=(TextView)findViewById(R.id.txt_scanning_UserName);
txt_scanning_ClientName=(TextView)findViewById(R.id.txt_scanning_ClientName);
dbo = new DB_Operations(getApplicationContext());
expandableScanning = (ExpandableListView) findViewById(R.id.expandableScanning);
prepareListData("Open");
scanlistAdapter = new ScanningListAdapter(ScanningActivity.this,this, ScanGroupHeader, ScanlistDataChild);
expandableScanning.setAdapter(scanlistAdapter);
Bundle bundle = getIntent().getExtras();
boolean IsBack = bundle.getBoolean("IsBack");
dbo.drop_Table(dbo, "GoodsPOScan");
if (!IsBack)
{
final CharSequence[] Credentials = bundle.getCharSequenceArray("ReceiptPo");
txt_scanning_UserName.setText(Credentials[0].toString());
txt_scanning_ClientName.setText(Credentials[1].toString());
ScanningPO_btn_TitleBar.setText(Credentials[2].toString());
}
else
{
final CharSequence[] Credentials = bundle.getCharSequenceArray("ReceiptPo");
txt_scanning_UserName.setText(Credentials[0].toString());
txt_scanning_ClientName.setText(Credentials[1].toString());
ScanningPO_btn_TitleBar.setText(Credentials[2].toString());
}
btn_ScanningPOBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(ScanningActivity.this);
builder.setTitle("Navigate to PO Item Details");
builder.setMessage("Click yes to Proceed!");
builder.setCancelable(false);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
final CharSequence[] put_UserCredentials = { txt_scanning_UserName.getText().toString().trim(),txt_scanning_ClientName.getText().toString().trim(),ScanningPO_btn_TitleBar.getText().toString().trim() };
Intent i = new Intent(getApplicationContext(), ItemDetailsActivity.class);
i.putExtra("ReceiptPo", put_UserCredentials);
i.putExtra("IsBack", true);
startActivity(i);
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog_GoToBack.dismiss();
}
});
dialog_GoToBack = builder.create();
dialog_GoToBack.show();
}
});
btn_ScanningPO_Back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(ScanningActivity.this);
builder.setTitle("Navigate to PO Item Details");
builder.setMessage("Click yes to Proceed!");
builder.setCancelable(false);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
final CharSequence[] put_UserCredentials = { txt_scanning_UserName.getText().toString().trim(),txt_scanning_ClientName.getText().toString().trim(),ScanningPO_btn_TitleBar.getText().toString().trim() };
Intent i = new Intent(getApplicationContext(), ItemDetailsActivity.class);
i.putExtra("ReceiptPo", put_UserCredentials);
i.putExtra("IsBack", true);
startActivity(i);
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog_GoToBack.dismiss();
}
});
dialog_GoToBack = builder.create();
dialog_GoToBack.show();
}
});
btn_ScanningPO_Next.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent receiptPo=new Intent(getApplicationContext(),GoodsPOFinishActivity.class);
final CharSequence[] put_UserCredentials = {txt_scanning_UserName.getText().toString().trim(),txt_scanning_ClientName.getText().toString().trim(),ScanningPO_btn_TitleBar.getText().toString().trim()};
receiptPo.putExtra("IsBack", false);
receiptPo.putExtra("ReceiptPo", put_UserCredentials);
startActivity(receiptPo);
finish();
}
});
}
private void prepareListData(String operation)
{
ScanGroupHeader=new ArrayList<ItemScanHeader>();
ScanlistDataChild = new HashMap<ItemScanHeader, List<ChildScanItem>>();
Cursor PendingPOHeader=dbo.getScanPOHeader(dbo);
if(PendingPOHeader.getCount()>0)
{
String Description,Itemcode,Qty;
PendingPOHeader.moveToFirst();
while(!PendingPOHeader.isAfterLast())
{
Description=PendingPOHeader.getString(PendingPOHeader.getColumnIndex("Description"));
Itemcode=PendingPOHeader.getString(PendingPOHeader.getColumnIndex("ItemCode"));
Qty=PendingPOHeader.getString(PendingPOHeader.getColumnIndex("OpenQty"));
ScanGroupHeader.add(new ItemScanHeader(Description, Itemcode, Qty));
String[] splitQty=Qty.split("\\.");
int scanCount=Integer.parseInt(splitQty[0]);
List<ChildScanItem> itemDetails = new ArrayList<ChildScanItem>();
if(operation.equalsIgnoreCase("Open"))
{
for(int i=0;i<scanCount;i++)
{
itemDetails.add(new ChildScanItem("Touch here to scan"));
}
}
else
{
for(int i=0;i<scanCount;i++)
{
itemDetails.add(new ChildScanItem(dbo.getScanDetails(dbo, i, Description)));
}
}
ScanlistDataChild.put(ScanGroupHeader.get(PendingPOHeader.getPosition()), itemDetails);
PendingPOHeader.moveToNext();
}
}
}
public void onActivityResult(int requestCode, int resultCode, Intent intent)
{
if (requestCode == 0)
{
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
dbo.updateScanDetails(dbo, contents);
prepareListData("Modify");
scanlistAdapter = new ScanningListAdapter(ScanningActivity.this,this, ScanGroupHeader, ScanlistDataChild);
expandableScanning.setAdapter(scanlistAdapter);
scanlistAdapter.notifyDataSetChanged();
}
else if (resultCode == RESULT_CANCELED)
{
// Handle cancel
Toast toast = Toast.makeText(getApplicationContext(), "Scan was Cancelled!", Toast.LENGTH_LONG);
toast.show();
}
}
}
@Override
public void onBackPressed() {
// do nothing.
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.scanning, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
公共类扫描活动扩展活动
{
按钮btn_ScanningPOBack,ScanningPO_btn_标题栏,btn_ScanningPO_Back,btn_ScanningPO_Next;
text查看txt\u扫描\u用户名,txt\u扫描\u客户端名称;
AlertDialog_GoToBack;
扫描列表适配器扫描列表适配器;
可扩展列表视图可扩展扫描;
列表扫描组标题;
HashMap ScanlistDataChild;
DB_操作dbo;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u扫描);
btn_ScanningPOBack=(按钮)findviewbyd(R.id.btn_ScanningPOBack);
ScanningPO_btn_标题栏=(按钮)findViewById(R.id.ScanningPO_btn_标题栏);
btn\u ScanningPO\u Back=(按钮)findViewById(R.id.btn\u ScanningPO\u Back);
btn\u ScanningPO\u Next=(按钮)findviewbyd(R.id.btn\u ScanningPO\u Next);
txt\u scanning\u UserName=(TextView)findViewById(R.id.txt\u scanning\u UserName);
txt\u scanning\u ClientName=(TextView)findViewById(R.id.txt\u scanning\u ClientName);
dbo=新的DB_操作(getApplicationContext());
expandableScanning=(ExpandableListView)findViewById(R.id.expandableScanning);
编制报表数据(“公开”);
scanlistAdapter=新的ScanningListAdapter(ScanningActivity.this,this,ScanGroupHeader,ScanlistDataChild);
expandableScanning.setAdapter(scanlistAdapter);
Bundle Bundle=getIntent().getExtras();
boolean IsBack=bundle.getBoolean(“IsBack”);
dbo.drop_表(dbo,“GoodsPOScan”);
如果(!IsBack)
{
最终CharSequence[]凭证=bundle.getCharSequenceArray(“ReceiptPo”);
txt_scanning_UserName.setText(凭证[0].toString());
txt_scanning_ClientName.setText(凭证[1].toString());
ScanningPO_btn_TitleBar.setText(凭证[2].toString());
}
其他的
{
最终CharSequence[]凭证=bundle.getCharSequenceArray(“ReceiptPo”);
txt_scanning_UserName.setText(凭证[0].toString());
txt_scanning_ClientName.setText(凭证[1].toString());
ScanningPO_btn_TitleBar.setText(凭证[2].toString());
}
btn_ScanningPOBack.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
AlertDialog.Builder=新建AlertDialog.Builder(ScanningActivity.this);
builder.setTitle(“导航到采购订单项目详细信息”);
setMessage(“单击yes继续!”);
builder.setCancelable(false);
builder.setPositiveButton(“是”,新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface对话框,int-id){
final CharSequence[]put_UserCredentials={txt_scanning_UserName.getText().toString().trim(),txt_scanning_ClientName.getText().toString().trim(),ScanningPO_btn_TitleBar.getText().toString().trim();
Intent i=新的Intent(getApplicationContext(),ItemDetailsActivity.class);
i、 putExtra(“ReceiptPo”,put_用户凭证);
i、 putExtra(“IsBack”,真);
星触觉(i);
}
});
setNegativeButton(“否”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface对话框,int-id){
dialog_GoToBack.discouse();
}
});
dialog_GoToBack=builder.create();
dialog_GoToBack.show();
}
});
btn_ScanningPO_Back.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
AlertDialog.Builder=新建AlertDialog.Builder(ScanningActivity.this);
builder.setTitle(“导航到采购订单项目详细信息”);
setMessage(“单击yes继续!”);
builder.setCancelable(false);
builder.setPositiveButton(“是”,新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface对话框,int-id){
final CharSequence[]put_UserCredentials={txt_scanning_UserName.getText().toString().trim(),txt_scanning_ClientName.getText().toString().trim(),ScanningPO_btn_TitleBar.getText().toString().trim();
Intent i=新的Intent(getApplicationContext(),ItemDetailsActivity.class);
i、 putExtra(“ReceiptPo”,put_用户凭证);
i、 putExtra(“IsBack”,真);
星触觉(i);
}
});
setNegativeButton(“否”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface对话框,int-id){
dialog_GoToBack.discouse();
}
});
dialog_GoToBack=builder.create();
dialog_GoToBack.show();
}
});
btn_ScanningPO_Next.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Intent receiptPo=newintent(getApplicationContext(),goodsFinishActivity.class);
final CharSequence[]put_UserCredentials={txt_scanning_UserName.getText().toString().trim(),txt_scanning_ClientName.getText().toString().trim(),ScanningPO_btn_TitleBar.getText().toString().trim();
接收PO.putExtra(“IsBack”,fa
public class ScanningListAdapter extends BaseExpandableListAdapter {
private Context _context;
DB_Operations dbo;
private List<ItemScanHeader> _listDataHeader;
private HashMap<ItemScanHeader, List<ChildScanItem>> _listDataChild;
private HashMap<Integer, String[]> mChildScanStates;
ScanningActivity scanningListAct;
private ChildScanViewHolder childViewHolder;
private GroupScanViewHolder groupViewHolder;
public ScanningListAdapter(ScanningActivity scanningListAct,Context context, List<ItemScanHeader> listDataHeader,
HashMap<ItemScanHeader, List<ChildScanItem>> listChildData) {
this.scanningListAct=scanningListAct;
this._context = context;
this._listDataHeader = listDataHeader;
this._listDataChild = listChildData;
mChildScanStates = new HashMap<Integer, String[]>();
dbo = new DB_Operations(_context);
}
@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return this._listDataHeader.size();
}
@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return this._listDataChild.get(this._listDataHeader.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return this._listDataHeader.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return this._listDataChild.get(this._listDataHeader.get(groupPosition)).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ItemScanHeader headerTitle = (ItemScanHeader) getGroup(groupPosition);
String itemName, itemCode, qty;
itemName = headerTitle.getItemName();
itemCode = headerTitle.getItemCode();
qty = headerTitle.getQty();
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_scan_group, null);
groupViewHolder = new GroupScanViewHolder();
groupViewHolder.mGroupText = (TextView) convertView.findViewById(R.id.ListScanName);
convertView.setTag(groupViewHolder);
}
else {
groupViewHolder = (GroupScanViewHolder) convertView.getTag();
}
TextView lblListHeader = (TextView) convertView.findViewById(R.id.ListScanName);
TextView lblListHeader1 = (TextView) convertView.findViewById(R.id.ListScanCode);
TextView lblListHeader2 = (TextView) convertView.findViewById(R.id.ListScanQty);
lblListHeader.setTypeface(null, Typeface.BOLD);
lblListHeader1.setTypeface(null, Typeface.BOLD);
lblListHeader2.setTypeface(null, Typeface.BOLD);
lblListHeader.setText(itemName);
lblListHeader1.setText(itemCode);
lblListHeader2.setText(qty);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
final int mGroupPosition = groupPosition;
final int mChildPosition = childPosition;
ChildScanItem childobject = (ChildScanItem) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_scan_child, null);
childViewHolder = new ChildScanViewHolder();
childViewHolder.mChildText = (TextView) convertView.findViewById(R.id.scanText);
childViewHolder.childLayout = (LinearLayout) convertView.findViewById(R.id.childScanLayout);
convertView.setTag(R.layout.list_scan_child, childViewHolder);
}
else {
childViewHolder = (ChildScanViewHolder) convertView.getTag(R.layout.list_scan_child);
}
childViewHolder.mChildText.setText(childobject.getScanDetails());
if (mChildScanStates.containsKey(mGroupPosition)) {
String getScanDetails[] = mChildScanStates.get(mGroupPosition);
if (getScanDetails[mChildPosition] == null)
childViewHolder.mChildText.setText("Touch here to scan");
else
childViewHolder.mChildText.setText(getScanDetails[mChildPosition]);
}
else {
String getScanDetails[] = new String[getChildrenCount(mGroupPosition)];
mChildScanStates.put(mGroupPosition, getScanDetails);
childViewHolder.mChildText.setText("Touch here to scan");
}
childViewHolder.mChildText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ItemScanHeader selectedItem=(ItemScanHeader)getGroup(mGroupPosition);
// childViewHolder.mChildText.setText("Postion"+mChildPosition);
try
{
dbo.PutScanDetails(dbo, selectedItem.getItemName(), mChildPosition);
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "PRODUCT_MODE");
((Activity) _context).startActivityForResult(intent, 0);
}
catch (ActivityNotFoundException anfe)
{
showDialog(_context, "No Scanner Found", "Download Barcode scanner?", "Yes", "No").show();
}
//String getScanDetails[] = mChildScanStates.get(mGroupPosition);
//getScanDetails[mChildPosition] = "postion" + mChildPosition;
//mChildScanStates.put(mGroupPosition, getScanDetails);
}
});
return convertView;
}
private static AlertDialog showDialog(final Context _context2, CharSequence title, CharSequence message,
CharSequence buttonYes, CharSequence buttonNo) {
AlertDialog.Builder downloadDialog = new AlertDialog.Builder(_context2);
downloadDialog.setTitle(title);
downloadDialog.setMessage(message);
downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int i) {
Uri uri = Uri.parse("market://search?q=pname:" + "com.google.zxing.client.android");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
try {
_context2.startActivity(intent);
} catch (ActivityNotFoundException anfe) {
}
}
});
downloadDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int i) {
}
});
return downloadDialog.show();
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true;
}
public final class GroupScanViewHolder {
TextView mGroupText;
}
public final class ChildScanViewHolder {
TextView mChildText;
LinearLayout childLayout;
}
}