私はTableLayoutと、データベースの内容に基づいて生成されたいくつかの未知数のTableRowを持っています。TableLayoutのテーブル行のインデックス
すべての行にはOnClickリスナーが添付されていますが、クリックが発生すると、それはどの行から来たのか(意味的に)わかりません。 TableLayoutに関連してtablerowのインデックスを取得する方法はありますか?それとも別のものを試すべきですか?
いくつかのコード:
private void buildBudgetTable() {
NumberFormat currencyFormatter = DecimalFormat.getCurrencyInstance();
TableLayout budgetTable = (TableLayout) findViewById(R.id.budgetTable);
budgetTable.removeAllViews();
try {
this.budgetItems = Budget.GetEntries(this);
} catch (SQLException e) {
Toast.makeText(getApplicationContext(), "Could not load budget", Toast.LENGTH_SHORT).show();
e.printStackTrace();
finish();
}
for(BudgetEntryItem entry : budgetItems){
TableRow tr = new TableRow(this);
tr.setPadding(1, 2, 1, 2);
TextView txtLeft = new TextView(this);
txtLeft.setText(entry.Memo);
txtLeft.setGravity(Gravity.LEFT);
txtLeft.setPadding(3,3,3,3);
TextView txtRight = new TextView(this);
txtRight.setText(currencyFormatter.format(entry.Amount));
txtRight.setGravity(Gravity.RIGHT);
txtRight.setPadding(3,3,3,3);
if(entry.Amount > 0){
txtRight.setBackgroundColor(Color.rgb(0x33, 0xEE, 0x33));
txtLeft.setBackgroundColor(Color.rgb(0x33, 0xEE, 0x33));
}else{
txtRight.setBackgroundColor(Color.rgb(0xEE, 0x33, 0x33));
txtLeft.setBackgroundColor(Color.rgb(0xEE, 0x33, 0x33));
}
tr.addView(txtLeft);
tr.addView(txtRight);
tr.setOnClickListener(this);
budgetTable.addView(tr);
}
}
変数が混在しています。エントリはテーブル行ではありません。私はタグとしてエントリー項目に入るだけで巻き終わった。 – Malfist
脇に目を通し、タグをインデックスに設定することを検討してください。あとでガベージコレクションをしたいかもしれないデータオブジェクトへの迷いの可能性の少ない参照につながり、全体的にはプログラミングのプラクティス全体が完全になります。 –