Java 如何从表行获取TextView id
我先画桌面,然后画桌子主体。在每个表单元格中,我都有TextView,所以当用户单击它时,我如何获取它的id或其他数字Java 如何从表行获取TextView id,java,android,android-tablelayout,Java,Android,Android Tablelayout,我先画桌面,然后画桌子主体。在每个表单元格中,我都有TextView,所以当用户单击它时,我如何获取它的id或其他数字 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TableLayout lTableLayout; lTab
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TableLayout lTableLayout;
lTableLayout = (TableLayout) findViewById(R.id.tbLayout);
/*Draw table top*/
TableRow trTop = new TableRow(this);
trTop.setPadding(0, 5, 0, 0);
trTop.setBackgroundColor(Color.rgb(102, 178, 255));
lTableLayout.addView(trTop, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
String[] str = new String[]{"Time", "Room1", "Room2"};
for(int j=0; j<3; j++){
TextView tv1 = new TextView(this);
tv1.setPadding(2, 2, 2, 2);
tv1.setTextSize(14);
tv1.setText(str[j]);
trTop.addView(tv1,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
}
/*Draw table body*/
for(int i=0; i<5; i++){
final TableRow tr1 = new TableRow(this);
tr1.setPadding(0, 5, 0, 0);
if((i%2) == 0)
tr1.setBackgroundColor(Color.WHITE);
lTableLayout.addView(tr1, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
for(int j=0; j<3; j++){
final TextView tv1 = new TextView(this);
tv1.setPadding(2, 2, 2, 2);
tv1.setTextSize(12);
if(j==0){
tv1.setText(8+i + ":00");
}else{
tv1.setText("reserved");
}
tr1.addView(tv1,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
tv1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(getApplicationContext(), "id = " + tv1.getId(),
Toast.LENGTH_LONG).show();
Log.e("TAG", " clicked ID: " + tr1.getId());
}
});
}
}
但是TOAST会对每个textview说:“id=-1”
public void onClick(View arg0) {
Toast.makeText(getApplicationContext(), "id = " + tv1.getId(),
Toast.LENGTH_LONG).show();
Log.e("TAG", " clicked ID: " + tr1.getId());
}
});
似乎您希望得到一个带有tv1.getId()的log.e(),上面写着tr1.getId(),因此您得到的是表行Id,而不是文本视图Id。请尝试将tr1更改为tv1,并告诉我是否有效
编辑:
每次创建textview和表行时,请使用
tr1.setId(i)
和tv1.setId(j)
手动为它们分配ID。它应该与之配合使用。setid()
以编程方式用于文本视图,例如,tv.setid(j)代码>非常感谢!!这对我很有帮助!在日志中,我尝试获取tablerow id,同时在Toast--TextView id中。他们购买了类似的答案get id=“-1”,所以我猜它会为每个项目提供id=-1,因为这是一个默认值。我会尝试按照这个答案在编辑的部分中所说的去做(现在我会编辑它)好的,现在我使用setid();像这样:tv1.setid(100+i*10+j);它帮助我后来在我的桌子上找到了手机。
public void onClick(View arg0) {
Toast.makeText(getApplicationContext(), "id = " + tv1.getId(),
Toast.LENGTH_LONG).show();
Log.e("TAG", " clicked ID: " + tr1.getId());
}
});