我想拥有不同的行,每行包含多个TextView(我自己创建了TextView类的扩展,在我的代码中称为Chip)。我动态创建芯片和桌子。我的问题是,当我将Chips添加到TableRow(以及TableLayout的行)时,我无法再点击它们。我试图使TableLayout和TableRow都可以点击,但没有运气。这个想法是每个TableRow应该包含不同数量的Chips,具体取决于它在屏幕上显示的数量(Chips将各自具有不同的文本)。我试着在这里查看类似的问题,但我找不到任何我可以在我的案例中使用的解决方案。
下面是TableLayout的XML代码
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1"
android:id="@+id/tabletest">
</TableLayout>
这是Java代码
LinearLayout test = (LinearLayout) findViewById(R.id.lineartest);
TableLayout ll = (TableLayout) findViewById(R.id.tabletest);
TableRow row= new TableRow(this);
TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
row.setLayoutParams(lp);
for (int i = 0; i < 10; i++) {
Chip c1 = new Chip(this);
c1.setText("Hey I'm " + i);
c1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Chip view = (Chip) v;
if (view.is_stateChanged()) {
view.set_selected(false);
} else {
view.set_selected(true);
}
view.set_stateChanged(!view.is_stateChanged());
}
});
row.addView(c1);
}
ll.addView(row);
我做错了吗?或者我必须找出被点击的行,然后通过标签触发点击芯片的正确clickEvent?
答案 0 :(得分:1)
Try to implement Listener like this
LinearLayout test = (LinearLayout) findViewById(R.id.lineartest);
TableLayout ll = (TableLayout) findViewById(R.id.tabletest);
TableRow row= new TableRow(this);
TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
row.setLayoutParams(lp);
for (int i = 0; i < 10; i++) {
Chip c1 = new Chip(this);
c1.setText("Hey I'm " + i);
c1.setOnClickListener(new Listener(c1));
row.addView(c1);
}
ll.addView(row);
}
class Listener implements View.OnClickListener
{
Chip view;
Listener(Chip view)
{
this.view = view;
}
@Override
public void onClick(View v) {
if (view.is_stateChanged()) {
view.set_selected(false);
} else {
view.set_selected(true);
}
view.set_stateChanged(!view.is_stateChanged());
}
}