Android

时间:2016-03-04 09:31:03

标签: android

我想拥有不同的行,每行包含多个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?

1 个答案:

答案 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());
        }
    }