0

我知道我可以为每个表格使用它,但它的代码很长

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

4 回答 4

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
        }
    }
});
于 2013-06-17T13:49:41.673 回答
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 仅包含一个元素,您应该使用 ListView 而不是 Phil 建议的 TableLayout。

我希望这能让您对可以前进的方向有所了解,但这实际上取决于您需要对被点击的项目做什么。

于 2013-06-17T14:21:23.783 回答
0

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

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

以及您填充行的时间(可能在所有行 ID 的循环中):

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

顺便说一句,Tag 也可以在 XML 中设置...

于 2013-06-17T14:15:22.603 回答
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;
          }        
}
于 2014-12-24T09:04:13.297 回答