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>

2 行目に 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

これは効率的なコードではないかもしれませんが、これを使用してテーブル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 に答える
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 に答える