0

我的要求是,我有一个包含多行的表格,通过选择单行应该在屏幕上显示其内容。我发现通过为每一行编写 onClick() 是可以实现的,但为多行编写多个 onClick() 是不可行的。那么有什么方法可以在不编写多个 onClick() 的情况下实现这一点。

这是我的表格 XML:

<?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/relativelayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
<ScrollView android:id="@+id/ScrollView01"  
       android:layout_height="100dp" android:layout_width="wrap_content">
    <TableLayout
        android:id="@+id/tableLayout1"
        android:layout_width="wrap_content"
        android:background="#000000"
        android:stretchColumns="*"
        android:layout_height="100dp"
        android:scrollbars="horizontal"
         >

        <TableRow
            android:layout_margin="0.2dip"
            android:background="#000000" >

            <TextView
                android:layout_margin="0.2dip"
                android:background="#FFFFFF"
                android:text="@string/code" />

            <TextView
                android:layout_margin="0.2dip"
                android:background="#FFFFFF"
                android:text="@string/name" />
        </TableRow>

        <TableRow
            android:layout_margin="0.2dip"
            android:background="#000000"
            android:focusable="true"
            android:onClick="showData" >

            <TextView
                android:id="@+id/code1"
                android:layout_margin="0.2dip"
                android:background="#FFFFFF"
                android:text="@string/code1" />

            <TextView
                android:id="@+id/code2"
                android:layout_margin="0.2dip"
                android:background="#FFFFFF"
                android:text="@string/name1" />
        </TableRow>

我已经为第二行写了 onClick。

这是活动类中的 onClick():

public void showData(View view){
        text = new EditText(this);

        //text = (EditText) findViewById(R.id.displayData);
        TextView tx1 = (TextView) findViewById(R.id.code1);
        TextView tx2 = (TextView) findViewById(R.id.code2);
        TextView tx3 = (TextView) findViewById(R.id.displayData);
        tx3 = new TextView(this);
        String str = tx1.getText().toString();
        String str1 = tx2.getText().toString();
        tx3.setText("CODE : "+str+" "+"NAME :"+str1);
        //text.setText("CODE : "+str+" "+"NAME :"+str1);
        //text.setText("NAME :"+str1);
        setContentView(tx3);
    }
4

2 回答 2

1

您可以简单地使用view.findViewById(R.id.code1)等(而不是findViewById不使用view.)来查找特定于每一行的文本视图。这样,所有行都可以对所有行使用相同的android:id值和单一onClick方法。(这类似于 a 的ListView工作方式。)

public void showData(View view){
    TextView tx1 = (TextView) view.findViewById(R.id.code1);
    TextView tx2 = (TextView) view.findViewById(R.id.code2);
    . . .
}

如果您想减少 xml 的绝对大小,您可以将属性放入样式中。

于 2013-01-08T04:49:31.003 回答
1

这可能不是有效的代码,但您可以使用它,获取您的表 id

tableLayoutGrid = (TableLayout) findViewById(R.id.yourtableid);
        int count=tableLayoutGrid.getChildCount();
        for(int i=0;i<count;i++)
        {
            TableRow row=(TableRow) tableLayoutGrid.getChildAt(i);
            row.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                       TextView tx1 = (TextView) row.getChildAt(0);
                        TextView tx2 = (TextView) row.getChildAt(1);
                        TextView tx3 = (TextView) findViewById(R.id.displayData);
                        tx3 = new TextView(this);
                        String str = tx1.getText().toString();
                        String str1 = tx2.getText().toString();
                        tx3.setText("CODE : "+str+" "+"NAME :"+str1);

                }
            });
        }

我希望这能帮到您..

于 2013-01-08T05:40:37.110 回答