为listview的每一行设置按钮onclick事件 [英] set button onclick event for every row of listview

查看:86
本文介绍了为listview的每一行设置按钮onclick事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用AsyncTask通过json解析填充listview.在列表视图的每一行中,我都有一个按钮.我想为他们写onclickLister.

i populate listview via json parsing using AsyncTask. in every row of list view i have a button. i want to write onclickLister for them.

我想要,当我单击添加到购物车"时,名称,价格和数量的数据保存到sqlite.

i want, when i click add to cart the data of name and price and quantity save to sqlite.

public void addtocart(){
        Button btnaddtocart=(Button)findViewById(R.id.btnInsertToCart);
        final TextView tname=(TextView)findViewById(R.id.nameNewItem);
        final EditText eqty=(EditText)findViewById(R.id.updateQty);
        final TextView tprice=(TextView)findViewById(R.id.priceNewItem);

        btnaddtocart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    if(eqty.getText().toString().equalsIgnoreCase("")){
                        Toast.makeText(getApplicationContext(),"Please enter the Quantity.",Toast.LENGTH_LONG).show();
                    }
                    else { SQLiteDatabase database = openOrCreateDatabase("ORCL", MODE_PRIVATE, null);
                        database.execSQL("CREATE TABLE IF NOT EXISTS CART(id integer primary key autoincrement,title VARCHAR(150),qty INT(10),price INT(10));");
                        database.execSQL("INSERT INTO CART(title,qty,price) VALUES('" + tname.getText().toString() + "'," + Integer.parseInt(eqty.getText().toString())+","
                                + Integer.parseInt(tprice.getText().toString())+");");

                        database.close();
                        eqty.setText(null);

                        //hide keyboard
                        InputMethodManager imm = (InputMethodManager)getSystemService(
                                Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(eqty.getWindowToken(), 0);

                        Toast.makeText(getApplicationContext(),"Add to Cart",Toast.LENGTH_LONG).show();}

                }
                catch (Exception ex){
                    Toast.makeText(getApplicationContext(),ex.getMessage(),Toast.LENGTH_LONG).show();
                }
            }
        });

但是我的问题是我应该编写以下代码的一部分:

but my question is i should write codes which part of following code:

public class Update extends Activity {
    ListView list;
    Button Btngetdata;
    ProgressDialog pDialog;
    ArrayList<HashMap<String, String>> newItemlist = new ArrayList<HashMap<String, String>>();
    private static final String TAG_ITEM = "NewItem";
    private static final String TAG_NAME = "name";
    private static final String TAG_DESCRIPTION = "description";
    private static final String TAG_PRICE = "price";
    ConnectionDetector cd;
    Boolean isInternetPresent = false;
    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.updateapp);
        pDialog = new ProgressDialog(Update.this);
        pDialog.setMessage("Getting Data ...");

        newItemlist = new ArrayList<HashMap<String, String>>();
        Btngetdata = (Button)findViewById(R.id.getdata);
        cd = new ConnectionDetector(getApplicationContext());
        Btngetdata.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                isInternetPresent = cd.isConnectingToInternet();
                if (isInternetPresent) {
                new JSONParse().execute();   }
                else {
                    Toast.makeText(getApplicationContext(),"You don't have internet connection.",Toast.LENGTH_LONG).show();
                }

            }
        });


    }
    private class JSONParse extends AsyncTask<String, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog.show();
        }
        @Override
        protected Void doInBackground(String... args) {
            try {
                Log.i("...............", "Hello..............");
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpGet httpPost = new HttpGet("http://www.karocellen.com/newItem.json");
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                String jsonstring = EntityUtils.toString(httpEntity);
                Log.i("...............",jsonstring);
                JSONObject json = new JSONObject(jsonstring);
                JSONArray newitem = json.getJSONArray(TAG_ITEM);
                for(int i = 0; i < newitem.length(); i++){
                    JSONObject c = newitem.getJSONObject(i);
                    String name = c.getString(TAG_NAME);
                    String description = c.getString(TAG_DESCRIPTION);
                    String  price = c.getString(TAG_PRICE);
                    Log.i("...............",name);
                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put(TAG_NAME, name);
                    map.put(TAG_DESCRIPTION, description);
                    map.put(TAG_PRICE, price);
                    newItemlist.add(map);
                }

            }   catch (Exception ex){


            }
            return null;

        }
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            pDialog.dismiss();
            list=(ListView)findViewById(R.id.listupdate);
            ListAdapter adapter = new SimpleAdapter(Update.this, newItemlist,
                    R.layout.updateapprow,
                    new String[] { TAG_NAME,TAG_DESCRIPTION, TAG_PRICE }, new int[] {
                    R.id.nameNewItem,R.id.descriptionNewItem, R.id.priceNewItem});
            list.setAdapter(adapter);              

    }
    }

推荐答案

使用CustomAdapter.

Use a CustomAdapter.

您需要了解listview的工作原理

You need to understand how listview works

ListView的回收机制如何工作

将活动上下文和列表NewItems传递到自定义适配器的构造函数.

Pass the activity context and the list NewItems to the constructor of the custom adapter.

   @Override
   protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            pDialog.dismiss();
            list=(ListView)findViewById(R.id.listupdate);
            CustomAdapter cus = new CustomAdapter(MainActivtiy.this,newItemlist); 
            list.setAdapter(cus);              

    }

使用带有文本视图和按钮的自定义布局.将其命名为list_item.xml

Use a Custom Layout with textviews and buttons. Name it list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="33dp"
        android:layout_marginTop="40dp"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView2"
        android:layout_marginLeft="34dp"
        android:layout_toRightOf="@+id/textView2"
        android:text="TextView" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView3"
        android:layout_marginTop="20dp"
        android:text="Button" />

</RelativeLayout>

增加布局,初始化和更新视图.将按钮上的侦听器设置为所需的内容.

Inflate the layout, initialize and update the views. Set Listener on the button do what is required.

  public class CustomAdapter extends BaseAdapter
    {
        LayoutInflater mInlfater;
        ArrayList<HashMap<String,String>> list;
        public CustomAdapter(Context context,ArrayList<HashMap<String,String>> list) 
        {
             mInlfater = LayoutInflater.from(context);
             this.list =list;
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return 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
            ViewHolder holder;
            if(convertView ==null)
            {
                convertView = mInlfater.inflate(R.layout.list_item,false);
                holder = new ViewHolder();
                holder.b1 = (Button)convertView.findViewById(R.id.button1);
                holder.tv1 = (TextView)convertView.findViewById(R.id.textView1);
                holder.tv2 = (TextView)convertView.findViewById(R.id.textView2);
                holder.tv3 = (TextView)convertView.findViewById(R.id.textView3);
                convertView.setTag(holder);

            }
            else
            {
                holder =(ViewHolder) convertView.getTag();
            }
            HashMap<String,String> map = list.get(position);
            holder.tv1.setText(map.get("name"));
                holder.tv2.setText(map.get("description"));
                holder.tv3.setText(map.get("price"));
                holder.b1.setOnClickListener(new OnClickListener()
                {

                @Override
                public void onClick(View v) {
                // TODO Auto-generated method stub

                }


               });
            return convertView;
        }
        static class ViewHolder
        {
            Button b1;
            TextView tv1,tv2,tv3;
        }
    } 

这篇关于为listview的每一行设置按钮onclick事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆