1

我有代码,我需要获取数据的 ArrayList(从 SQLite 数据库返回)并通过下面的代码将其转换为表。我想知道的是如何将 clickListener 添加到我动态添加到表中的按钮中?基本上,它会将行中某一列的值添加到我在其他地方访问的 SharedPreference 变量中。

如果需要更多信息,请告诉我,但我认为这是有道理的。

DatabaseHandler db = new DatabaseHandler(TabFragment3.this.getActivity());
List<FoodPoints> foodpoints = db.getAllFoodPoints();

    for (FoodPoints fp : foodpoints) {
        String listFood = fp.getFood();
        String listPoints = Integer.toString(fp.getPoints());
        String listDate = fp.getDate();

        listDate = listDate.substring(0, 12);

        insertRow(tablePoints, listFood, listPoints, listDate);
        // String log = "ID: " + fp.getID() + ", Food: " + fp.getFood() + ", Points: " + fp.getPoints() + ", Date: " + fp.getDate();
        // Log.d("FoodPoints", log);
    }

private void insertRow(TableLayout tablePoints, String tblFoodName, String tblFoodPoints, String tblFoodDate) {
    final TableRow newrow = new TableRow(currentActivity);

     addPlusButtonPointsTable(newrow);
    addTexttoRowswithValues(newrow, tblFoodName, 3);
    addTexttoRowswithValues(newrow, tblFoodPoints, 17);
    addTexttoRowswithValues(newrow, tblFoodDate, 17);
    tablePoints.addView(newrow);
}

...

private void addPlusButtonPointsTable(TableRow newrow) {
    Button plusButton = new Button(currentActivity);
    //plusButton.setBackgroundColor(R.drawable.);
    plusButton.setText("+");
    plusButton.setMinimumWidth(1);
    plusButton.setMinimumHeight(1);
    plusButton.setTextSize(14);

    newrow.addView(plusButton);
}
4

2 回答 2

1

您可以修改该addPlusButtonPointsTable()方法以获取在单击单击时您希望存储在首选项中的列的值(例如食物名称)Button(我认为这不是您想要的吗?),如下所示:

private void addPlusButtonPointsTable(TableRow newrow, String foodName) {
    // ...
    // set the data as the tag for the Button
    plusButton.setTag(foodName);
    plusButton.setOnClickListener(mListener);
    // ...
}

这个方法会被这样调用:

addPlusButtonPointsTable(newrow, tblFoodName);

mListener是这样的:

OnClickListener mListener = new OnCLickListener() {

     @Override
     public void onClick(View v) {
         String foodName = (String)v.getTag();
         // store the value.
     }
}

我还建议您LayoutParams 在将视图添加到TableRow和时使用正确TableRowTableLayout.

将视图添加到TableRow

newrow.addView(plusButton, new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));

当添加TableRowTableLayout

tablePoints.addView(newrow, new Tablelayout.LayoutParams(Tablelayout.LayoutParams.MATCH_PARENT, Tablelayout.LayoutParams.WRAP_CONTENT));

如果您支持低于 2.2 的版本,请FILL_PARENT使用MATCH_PARENT.

于 2012-10-19T13:24:46.043 回答
1

在您的addPlusButtonPointsTable()方法中添加以下行:

plusButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // do what you want
    }
});
于 2012-10-19T13:17:17.513 回答