如何检测该tablerow已被按下

时间:2013-06-17 13:36:08

标签: android tablelayout

我知道我可以在每个tablerow中使用它,但这是非常长的代码

setOnClickListener(new OnClickListener() {  
    public void onClick(View v)
        {
            //perform action
        }
     });

但我有12个表格行,我认为这很长...也许这个结构

tablelayout {
 if (tablerow.id = 1) {
   // action if i pressed the first row
 } else if (tablerow.id = 2) {
   // action if i pressed the second row
 }
}

4 个答案:

答案 0 :(得分:1)

您可以直接在setOnItemClickListener上致电ListView。因此,不要在适配器的setOnClickListener方法中调用getView,只需使用它:

ListView mListView = (ListView) findViewById(R.id.listview);//or whatever the id is
mListView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //then use a switch statement
        switch(position) {
            case 1 : 
                //do something if first row is clicked
                break;
            case 2 : 
                //row 2 clicked
                break;//don't forget these breaks
        }
    }
});

答案 1 :(得分:0)

您可以使用View.setTag(Object obj)

OnClickListener mListener = new OnClickListener() {  
    public void onClick(View v) {
        Integer tag = (Integer)v.getTag();
        switch (tag.intValue()) {
            case ROW1: ...
        }
    }
 });

和你填充行的时间就是这样(可能在所有row-id循环中):

TableRow row = tableLayout.findViewById(ROW1);
row.setTag(ROW1);
row.setOnClickListener(mListener);

顺便说一下,Tag也可以用XML设置......

答案 2 :(得分:0)

如果您使用的是TableLayout,则可以将单个OnClickListener添加到TableRow内部的元素(位于TableLayout内部)。

例如,如果您在TableRow中有一个Button和一个TextView,并且您希望按钮在单击时执行某些操作,那么您应该将OnClickListener添加到该按钮。如果所有按钮都转到同一个地方,但根据TableLayout中的位置发送不同的数据,那么你可以这样做:

String[] texts; //The different texts your button could say
for(int i = 0; i < 12; i++){
  final Button yourButton = new Button(this);
  yourButton.setText(texts[i]);
  yourButton.setOnClickListener(new OnClickListener(){
    Intent i = new Intent(this, YourClass.class);
    i.putExtra(yourButton.getText());
    startActivity(i);
  }
}

如果你的TableRow只包含一个元素,那么你应该像Phil建议的那样使用ListView而不是TableLayout。

我希望有一种方法可以让你了解你可以去的方向,但这实际上取决于你需要对所点击的项目做些什么。

答案 3 :(得分:0)

  /************ if table row is dynamic then this method else method 2 is perfect************/
//if we want to applay listener on dynamic tablerow then use this
//sure that perfect 
 TablRowe tr = new TableRow(this);
tr.setClickable(true);
tr.setId(100);// if in loop then add 1 counter with 100 like (100+counter) at end count++ it
 tr.setOnClickListener(this);
 @Override
    public void onClick(View v) 
{
        switch (v.getId())
         {
         case 100: 
               Toast.makeText(getApplicationContext(), "100", Toast.LENGTH_SHORT).show();   
             break;

         case 101:
            Toast.makeText(getApplicationContext(), "101", Toast.LENGTH_SHORT).show();  
             break;
}
/************************** for simple like this ************************/
   TableRow row1 = (TableRow)findViewById(R.id.row1);
row1.setonClickListener(this);
public void onClick(View v)
{
switch (v.getId())
         {
         case R.id.row1: 
           // do work
             break;
          }        
}