【发布时间】:2014-01-31 12:26:26
【问题描述】:
我正在尝试创建一个小型计算器小部件,但我无法使用StringBuilder 连接输入字符串,因为每次单击按钮时小部件仅显示与单击的按钮相对应的字符串。
StringBuilder 中的 append 方法似乎不起作用。你能给我一些帮助吗?
以下是代码的相关部分:
StringBuilder sb = new StringBuilder();
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
Log.i(LOG_TAG, "onReceive(): " + action);
if (ACTION_WIDGET_CONTROL.equals(action)) {
final int appWidgetId = intent.getIntExtra(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
fnHandleCommand(context, intent, appWidgetId);
}
} else {
super.onReceive(context, intent);
}
}
private void fnHandleCommand(Context context, Intent intent, int appWidgetId) {
int control_id = intent.getIntExtra(COMMAND, -1);
switch (control_id) {
case R.id.Button00:
String zero = "0";
sb.append(zero);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.Button01:
String uno = "1";
sb.append(uno);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.Button02:
String due = "2";
sb.append(due);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.Button03:
String tre = "3";
sb.append(tre);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.Button04:
String quattro = "4";
sb.append(quattro);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.Button05:
String cinque = "5";
sb.append(cinque);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.Button06:
String sei = "6";
sb.append(sei);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.Button07:
String sette = "7";
sb.append(sette);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.Button08:
String otto = "8";
sb.append(otto);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.Button09:
String nove = "9";
sb.append(nove);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.ButtonPlus:
String piu = "+";
sb.append(piu);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.ButtonMinus:
String meno = "-";
sb.append(meno);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.ButtonMutiple:
String per = "*";
sb.append(per);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.ButtonDivide:
String diviso = "/";
sb.append(diviso);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.ButtonNegative:
String rad = "\u221a";
sb.append(rad);
setInputText(context, appWidgetId,sb.toString());
break;
case R.id.ButtonAC:
String vuota = "";
sb.setLength(0);
cancel(context, appWidgetId,sb.toString(),vuota);
break;
default:
break;
}
fnVibrate(context);
}
private void setInputText(Context context, int appWidgetId, String value) {
RemoteViews remoteView = new RemoteViews(context.getPackageName(),
R.layout.simple_calculator);
remoteView.setTextViewText(R.id.TextValue, value);
AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId,
remoteView);
}
谢谢
【问题讨论】:
-
你试过调试它吗?
StringBuilder.append不工作的可能性远小于它在其他地方出现问题的可能性......我怀疑你会发现一些你没有发布的代码正在清除 @ 987654325@ 在点击之间。在fnHandleCommand的开始处记录(或使用调试器检查)sb的值。 -
你有什么问题?
-
似乎每次点击都会初始化stringbuilder
标签: java android string android-widget stringbuilder