TableLayout中按钮的多个onClick

时间:2012-11-21 10:47:12

标签: android android-tablelayout

我有一个表格布局,我在其中显示如下值:

enter image description here

现在我可以实现行点击,但每行有三个按钮。

单击Start,Completed和Delivered,我需要更新mysql表中的列(Status) 如果它只是一个表格行,我们就可以这样做:

tr.setOnClickListener(new OnClickListener() {

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

                System.out.println("Row clicked: " + pos.getId());
            }
        });

下面是我的表格布局代码:

/*******getting values from mysql db  and assigning it to teach row***********/
try{
            allarray = new JSONArray(result);
            System.out.println("array is " +allarray.length());
            JSONObject json_data=null;
                for(int j=0;j<allarray.length();j++){
                json_data = allarray.getJSONObject(j);
                json_data.getString("PreparationLot");
                json_data.getString("Prep_MenuItem");
                json_data.getString("Prep_Quantity");
                json_data.getString("Prep_Order_Number");
                json_data.getString("Prep_Notes");

                TableLayout tl = (TableLayout) findViewById(R.id.tableLayout1);

                TableRow tr = new TableRow(DashBoard.this);
                if(count%2!=0) {
                    tr.setBackgroundColor(Color.rgb(222, 219, 219));
                }else{
                    tr.setBackgroundColor(Color.rgb(255, 255, 255));
                }
                tr.setId(20);
                tr.setLayoutParams(new LayoutParams());

                TextView lotno = new TextView(DashBoard.this);
                lotno.setId(200+count);// define id that must be unique
                lotno.setText(""+json_data.getString("PreparationLot")); // set the text for the header 
                lotno.setTextColor(Color.BLACK); // set the color
                lotno.setPadding(10, 10, 0, 10); // set the padding (if required)
                lotno.setTextSize(18);
                tr.addView(lotno);

                TextView itemname = new TextView(DashBoard.this);
                itemname.setId(200+count);// define id that must be unique
                itemname.setText(""+json_data.getString("Prep_MenuItem")); // set the text for the header 
                itemname.setTextColor(Color.BLACK); // set the color
                itemname.setPadding(30, 10, 0, 10); // set the padding (if required)
                itemname.setTextSize(18);
                tr.addView(itemname);

                TextView qty = new TextView(DashBoard.this);
                qty.setId(200+count);// define id that must be unique
                qty.setText(""+json_data.getString("Prep_Quantity")); // set the text for the header 
                qty.setTextColor(Color.BLACK); // set the color
                qty.setPadding(70, 10, 0, 10); // set the padding (if required)
                qty.setTextSize(18);
                tr.addView(qty);

                TextView order = new TextView(DashBoard.this);
                order.setId(200+count);// define id that must be unique
                order.setText(""+json_data.getString("Prep_Order_Number")); // set the text for the header 
                order.setTextColor(Color.BLACK); // set the color
                order.setPadding(60, 10, 0, 10); // set the padding (if required)
                order.setTextSize(18);
                tr.addView(order);

                TextView notes = new TextView(DashBoard.this);
                notes.setId(200+count);// define id that must be unique
                notes.setText(""+json_data.getString("Prep_Notes")); // set the text for the header 
                notes.setTextColor(Color.BLACK); // set the color
                notes.setPadding(60, 10, 0, 10); // set the padding (if required)
                notes.setTextSize(18);
                tr.addView(notes);

                Button start = new Button(DashBoard.this);
                start.setText("Start");
                start.setMaxWidth(10);
                tr.addView(start); 

                Button complete = new Button(DashBoard.this);
                complete.setText("Complete");
                complete.setMaxWidth(10);
                tr.addView(complete); 

                Button delivered = new Button(DashBoard.this);
                delivered.setText("Delivered");
                delivered.setMaxWidth(10);
                tr.addView(delivered); 

                tl.addView(tr, new TableLayout.LayoutParams(
                        LayoutParams.FILL_PARENT,
                        LayoutParams.WRAP_CONTENT));

           count++;
           tr.setClickable(true);
           tr.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View pos) {
                // TODO Auto-generated method stub
            //  Toast.makeText(DashBoard.this, v.getId(), 1000).show();
                System.out.println("Row clicked: " + pos.getId());
            }
        });
                }
            }
            catch(JSONException e1){
                    Toast.makeText(getBaseContext(), "No data Found" ,Toast.LENGTH_LONG).show();
            } 

问题: 如果我点击“开始”,“已完成”或“已下达”,我需要更新该行的状态。怎么做?

2 个答案:

答案 0 :(得分:1)

您需要为行中的每个项目添加onclicklistner,而不是行本身。

Button start = new Button(DashBoard.this);
start.setText("Start");
start.setMaxWidth(10);
start.setOnClickListener(new OnClickListener() {

     @Override
      public void onClick(View pos) {
                       // update fields for start
                       // your code for update your status of the row
      }
      });
tr.addView(start); 

Button complete = new Button(DashBoard.this);
complete.setText("Complete");
complete.setMaxWidth(10);
complete.setOnClickListener(new OnClickListener() {

     @Override
      public void onClick(View pos) {
                       // update fields for complete
                       // your code for update your status of the row
      }
      });

tr.addView(complete); 


Button delivered = new Button(DashBoard.this);
delivered.setText("Delivered");
delivered.setMaxWidth(10);
delivered.setOnClickListener(new OnClickListener() {

     @Override
      public void onClick(View pos) {
                       // update fields for delivered
                       // your code for update your status of the row
      }
      });

tr.addView(delivered);

编辑:添加了另外两个onclicklistners并添加了一些纪念

答案 1 :(得分:0)

  

问题:如果我点击开始,已完成或已发送,我需要更新   该行的状态。怎么做?

首先,我不知道您更新行的状态了解了什么。如果你想&#34;看&#34;点击任意Buttons中任意TableRows的任何内容OnCLickListener创建一个private OnClickListener mListener = new OnClickListener() { @Override public void onClick(View v) { TableRow tr = (TableRow) v.getParent(); // now you have a reference to the row where this Button that was // clicked exists // do whatever row updates you want. } };

mListener

TableRow将设置为Buttons //... Button start = new Button(DashBoard.this); start.setOnClickListener(mListener); start.setText("Start"); start.setMaxWidth(10); tr.addView(start); Button complete = new Button(DashBoard.this); complete.setOnClickListener(mListener); complete.setText("Complete"); complete.setMaxWidth(10); tr.addView(complete); Button delivered = new Button(DashBoard.this); delivered.setOnClickListener(mListener); delivered.setText("Delivered"); delivered.setMaxWidth(10); tr.addView(delivered); {<1}}中的每一个:

{{1}}