EditText in GridView : How to get value from Multiple EditText EditText in GridView : How to get value from Multiple EditText json json

EditText in GridView : How to get value from Multiple EditText


With My Question i am success to save data in JSONArray but got Again This Problem

and Finally i found solution:

I have used BaseAdapter instead of SimpleCursorAdapter

MyGridViewAdapter.java

class MyGridViewAdapter extends BaseAdapter {    private ArrayList<ProductItems> productItemList;    private LayoutInflater inflater = null;    ViewHolder holder;    ImageLoader mImageLoader;    int concatid;    String productQtyValue;    Double productRateValue;    Double productDiscountValue;    int tempId = 0;    public MyGridViewAdapter(ArrayList<ProductItems> productItemsList) {        // TODO Auto-generated constructor stub        this.productItemList = productItemsList;        mImageLoader = new ImageLoader(context);        inflater =(LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return productItemList.size();    }    @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return productItemList.get(position);    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        // TODO Auto-generated method stub        View view = convertView;        if(convertView == null)        {            view = inflater.inflate(R.layout.list_product_view, null);            holder = new ViewHolder();        }else        {            holder = (ViewHolder) view.getTag();        }        ProductItems currentProductItem = productItemList.get(position);        holder.prodId = currentProductItem.getProdId();        holder.prodImagePath = currentProductItem.getProdImagePath();        holder.prodDesc = currentProductItem.getProdDesc();                //Image        holder.prodImage = (ImageView) view.findViewById(R.id.productImage);        mImageLoader.DisplayImage(holder.prodImagePath, holder.prodImage);        holder.prodImage.setTag(holder);        holder.prodImage.setOnClickListener(new OnClickListener() {            @SuppressWarnings("deprecation")            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                ViewHolder tempHolder = (ViewHolder)v.getTag();                                AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();                alertDialog.setTitle(tempHolder.prodName.getText());                LayoutInflater inflater = getActivity().getLayoutInflater();                                // Inflate and set the layout for the dialog                // Pass null as the parent view because its going in the dialog                // layout                View view = inflater.inflate(R.layout.custom_image, null);                ImageView image = (ImageView) view.findViewById(R.id.dialogImageView);                mImageLoader.DisplayImage(tempHolder.prodImagePath, image);                                ((TextView)view.findViewById(R.id.dialogTextViewDesc)).setText(tempHolder.prodDesc);                alertDialog.setView(view);                alertDialog.setButton("OK", new DialogInterface.OnClickListener() {                    public void onClick(DialogInterface dialog, int which) {                        // here you can add functions                        dialog.dismiss();                    }                });                alertDialog.show();            }        });        holder.prodName = (TextView) view.findViewById(R.id.productName);        holder.prodName.setText(currentProductItem.getProdName());        holder.prodQty = (EditText) view.findViewById(R.id.productQuantityValue);        holder.prodQty.setTag(holder);        holder.prodQty.setOnFocusChangeListener(new OnFocusChangeListener() {            @Override            public void onFocusChange(View v, boolean hasFocus) {                // TODO Auto-generated method stub                if(!hasFocus)                {                    ViewHolder viewHolder = (ViewHolder) v.getTag();                    saveData(viewHolder);                }            }        });        holder.prodRate = (EditText) view.findViewById(R.id.productRateValue);        holder.prodRate.setTag(holder);        holder.prodDisc = (EditText) view.findViewById(R.id.productDiscountValue);        holder.prodDisc.setTag(holder);        /** First check whether value of Saved product Array is >0 or not..*/        Log.d("msg", "Saved Prod : "+allProductArray.length());        if(allProductArray.length() <= 0)        {            productRateValue = currentProductItem.getProdRate();            productDiscountValue = currentProductItem.getProdDisc();        }        /* Filling up value if previously entered... */        for (int array = 0; array < allProductArray.length(); array++) {            try {                if(allProductArray.getJSONObject(array).getInt("prodid") == holder.prodId)                {                    productRateValue = allProductArray.getJSONObject(array).getDouble("rate");                    productDiscountValue = allProductArray.getJSONObject(array).getDouble("discount");                    productQtyValue = allProductArray.getJSONObject(array).getString("qty");                    holder.prodQty.setText(String.valueOf(productQtyValue));                    break;                }else                {                    productRateValue = currentProductItem.getProdRate();                    productDiscountValue = currentProductItem.getProdDisc();                    holder.prodQty.setText("");                }            } catch (JSONException e) {                // TODO Auto-generated catch block                Log.e("msg", "JSON error in bindView : " + e.getMessage());            }        }        //holder.prodQty.setText("");        holder.prodRate.setText(String.valueOf(productRateValue));        holder.prodDisc.setText(String.valueOf(productDiscountValue));        holder.prodRate.setFocusable(isRateEditable);        holder.prodRate.setEnabled(isRateEditable);        holder.prodDisc.setFocusable(isDiscountEditable);        holder.prodDisc.setEnabled(isDiscountEditable);        // For set Focus on Next        if(isRateEditable)            holder.prodQty.setNextFocusDownId(R.id.productRateValue);        else if(isDiscountEditable)            holder.prodQty.setNextFocusDownId(R.id.productDiscountValue);        if(isDiscountEditable)            holder.prodRate.setNextFocusDownId(R.id.productDiscountValue);        holder.prodDisc.setNextFocusDownId(R.id.productQuantityValue);        int catid = currentProductItem.getProdId();        concatid = Integer.parseInt(catid + "" + tempId++);        Log.d("msg", "Inner Concat ID :"+concatid);        view.setId(concatid);        view.setTag(holder);        return view;    }    public class ViewHolder{        int prodId;        String prodImagePath;        String prodDesc;        ImageView prodImage;        TextView prodName;        EditText prodRate;        EditText prodQty;        EditText prodDisc;    }}

I have converted Cursor in to ArrayList<ProductItems>:

if (!dbHelper.db.isOpen())dbHelper.open();productCursor = dbHelper.getProduct(companyid, categoryid, isDistributor);//                  String[] cols = new String[] { DatabaseHelper.PRODUCT_IMAGES, DatabaseHelper.PRODUCT_NAME, "rate", "discount"};//                  int[]   views = new int[] { R.id.productImage, R.id.productName, R.id.productRateValue, R.id.productDiscountValue};Log.d("msg", "Count of Product : "+productCursor.getCount());prodItemsArrayList.clear();if (productCursor != null && productCursor.getCount() > 0) {    ProductItems items;    for(productCursor.moveToFirst(); !productCursor.isAfterLast(); productCursor.moveToNext())    {        items = new ProductItems();        items.setProdId(productCursor.getInt(productCursor.getColumnIndex(DatabaseHelper.PRODUCT_SERVER_ID)));        items.setProdName(productCursor.getString(productCursor.getColumnIndex(DatabaseHelper.PRODUCT_NAME)));        items.setProdImagePath(productCursor.getString(productCursor.getColumnIndex(DatabaseHelper.PRODUCT_IMAGES)));        items.setProdQty("");        items.setProdRate(productCursor.getDouble(productCursor.getColumnIndex("rate")));        items.setProdDisc(productCursor.getDouble(productCursor.getColumnIndex("discount")));        items.setProdDesc(productCursor.getString(productCursor.getColumnIndex(DatabaseHelper.PRODUCT_DESC)).equals("null") ? "" : productCursor.getString(productCursor.getColumnIndex(DatabaseHelper.PRODUCT_DESC)));        prodItemsArrayList.add(items);    }    //Now create an array adapter and set it to display using our row    //passing cursor with zero rows and displaying error message    adapter = new MyGridViewAdapter(prodItemsArrayList);    adapter.notifyDataSetChanged();    productTable.setAdapter(adapter);    /* HIDE ERROR MSG */    (view.findViewById(R.id.productIfNoAvailable)).setVisibility(View.GONE);} else {    /* SHOW ERROR MSG */    (view.findViewById(R.id.productIfNoAvailable)).setVisibility(View.VISIBLE);    adapter.notifyDataSetChanged();    adapter.notifyDataSetInvalidated();}

Any Suggestion would be Appreciated :)

Thanks...


Do this way..

JSONObject output = new JSONObject();@Overridepublic View getView(int position, View convertView, ViewGroup parent) {    View view = convertView;    ViewHolder holder;    if (convertView == null) {        // get reference to the row        view = super.getView(position, convertView, parent);        holder = new ViewHolder();        holder.prodImage = (ImageView) view.findViewById(R.id.productImage);        holder.prodName = (TextView) view.findViewById(R.id.productName);        holder.prodQty = (EditText) view.findViewById(R.id.productQuantityValue);        holder.prodRate = (EditText) view.findViewById(R.id.productRateValue);        holder.prodDisc = (EditText) view.findViewById(R.id.productDiscountValue);        view.setTag(holder);    } else {        holder = (ViewHolder) view.getTag();    }    productRateValue = cursor.getDouble(productCursor.getColumnIndex("rate"));    productDiscountValue = cursor.getDouble(productCursor.getColumnIndex("discount"));    String path = productCursor.getString(productCursor.getColumnIndex(DatabaseHelper.PRODUCT_IMAGES));    mImageLoader.DisplayImage(path, holder.prodImage);    holder.prodName.setText(productCursor.getString(productCursor.getColumnIndex(DatabaseHelper.PRODUCT_NAME)));    holder.prodQty.setText("");    holder.prodRate.setText(String.valueOf(productRateValue));    holder.prodDisc.setText(String.valueOf(productDiscountValue));    holder.prodRate.setFocusable(isRateEditable);    holder.prodRate.setEnabled(isRateEditable);    holder.prodDisc.setFocusable(isDiscountEditable);    holder.prodDisc.setEnabled(isDiscountEditable);    /* For set Focus on Next */    if (isRateEditable)        holder.prodQty.setNextFocusDownId(R.id.productRateValue);    else if (isDiscountEditable)        holder.prodQty.setNextFocusDownId(R.id.productDiscountValue);    if (isDiscountEditable)        holder.prodRate.setNextFocusDownId(R.id.productDiscountValue);    holder.prodDisc.setNextFocusDownId(R.id.productQuantityValue);    holder.prodQty.addTextChangedListener(new TextWatcher() {        @Override        public void onTextChanged(CharSequence s, int start, int before, int count) {        }        @Override        public void beforeTextChanged(CharSequence s, int start, int count, int after) {        }        @Override        public void afterTextChanged(Editable s) {            output.put(productCursor.getString(productCursor.getColumnIndex(DatabaseHelper.PRODUCT_NAME)),s);        }    });    return view;}public class ViewHolder {    ImageView prodImage;    TextView prodName;    EditText prodRate;    EditText prodQty;    EditText prodDisc;}

you will get output jsonobject with prodname and it's entered qty here.