我知道我可以在每个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
}
}
答案 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;
}
}