1

このリンク (http://stackoverflow.com/questions/6603868/android-onclicklistener-and-table-layout) を見ましたが、質問者にとってはうまくいくようです。とは言え、これが私の状況です。

4 列のデータで動的に埋められた TableLayout があります。上記のリンクの例のようなボタンがないため、行全体がクリック可能である必要があります。

クリックされた行は、最初の列 (列 0) のデータを渡す必要があります。これは単なる文字列です。新しい行を作成するために呼び出される関数を次に示します。

private void addLotTableRow(CharSequence [] row, int count) {
    final TableLayout table = (TableLayout) findViewById(R.id.lotsTableList);
    final TableRow tr = (TableRow) getLayoutInflater().inflate(R.layout.lotsrow, null);
    TextView tv;
    // Fill Cells
        tv = (TextView) tr.findViewById(R.id.lotCell1);//Cell 1: Lot Number
        tv.setText(row[0]);

        tv = (TextView) tr.findViewById(R.id.lotCell2);//Cell 2: Sample
        tv.setText(row[1]);

        tv = (TextView) tr.findViewById(R.id.lotCell3);//Cell 3: Inspected
        tv.setText(row[3]);

        tv = (TextView) tr.findViewById(R.id.lotCell4);//Cell 4: Total
        tv.setText(row[2]);

        table.addView(tr);
}

だから私はもともと tr.setOnClickListener(new View.OnclickListener() {blahblah}); を作ろうとしました。この関数では、 table.addView(tr) 行の直前。「何とか」はもちろん onClick(View v) 関数でした。どの行をクリックしても、最初は最後の行のデータしか取得できませんでした。今、私は上記のリンクのようにしようとしていて、すべてのテーブル行が作成された後、より高い関数から onclicks を生成しようとしています。おそらくもっと多くの情報を提供できると思いますが、これでひとまず理解できると思います! 助けてくれてありがとう!

4

1 に答える 1

1

結論:わかった!

質問に投稿したリンクからの解決策に基づいて、セルのデータを表示するには textview オブジェクトを作成する必要があることに気付きました! したがって、変更されていない上記のコードに関連して、ここに私のコードがあります!

    int rowNumCount = table.getChildCount();
    for(int count = 1; count < rowNumCount; count++) {
        View v = table.getChildAt(count);
        if(v instanceof TableRow) {
            final TableRow clickRow = (TableRow)v;
            int rowCount = clickRow.getChildCount();
            v.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    Context context = getTabHost().getContext();
                    TableRow row = (TableRow)v;
                    TextView tv = (TextView)row.getChildAt(0);
                    CharSequence text = "Lot VALUE Selected: " + tv.getText();
                    int duration = Toast.LENGTH_SHORT;
                    Toast.makeText(context, text, duration).show();
                }
            });
        }
    }

先ほど言ったように、最初の列のデータのみを取得する必要があったため、row.getChildAt(0); ライン!したがって、おそらく誰もこの質問に答える機会さえなかったと思いますが、私の答えが将来他の人に役立つことを願っています!

「リストビューを使用しないのはなぜですか?」という質問の根拠 回答: 私が作成しているものは、表形式の方が見栄えが良いと思います。

コードのセットアップに大きな変更を加えることはないかもしれませんが、コードの改善に役立つ可能性のある変更をいつでも聞くことができます。このコミュニティが大好きです!

于 2012-07-26T15:33:49.973 に答える