我写了个AppWidget:
configure activity就一个输入框和按钮, 点按钮, 把输入框的文本存到SharedPreferences, 更新RemoteViews;
app widget的layout就一个TextView, 显示上一步输入框的文本;
更新RemoteViews时, 使用PendingIntent让TextView点击后打开一个DisplayActivity;
DisplayActivity也只有一个TextView, 显示传入的文本;问题:
添加2个这样的app widget, 第一个总是显示第二个app widget打开的DisplayActivity, 到底是为什么?RookieAppWidgetConfigure:package pub.rookie;import android.app.Activity;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RemoteViews;public class RookieAppWidgetConfigure extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rookie_app_widget_configure); Intent i = this.getIntent();
Bundle extras = i.getExtras();
if (extras != null)
{
appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
} Button btn = (Button) this.findViewById(R.id.button1);
final EditText et = (EditText) this.findViewById(R.id.editText1); btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
String text = et.getText().toString();
SharedPreferences sp = RookieAppWidgetConfigure.this
.getSharedPreferences("rookie_app_widget",
MODE_WORLD_WRITEABLE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(appWidgetId + "", text);
editor.commit(); Intent i = new Intent();
i.setClass(RookieAppWidgetConfigure.this, DisplayActivity.class);
i.putExtra("text", text);
Uri data = Uri.withAppendedPath(Uri.parse("schemeX"
+ "://widget/id/"), String.valueOf(appWidgetId));
i.setData(data);
PendingIntent pi = PendingIntent.getActivity(
RookieAppWidgetConfigure.this, appWidgetId, i,
PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews rv = new RemoteViews(RookieAppWidgetConfigure.this
.getPackageName(), R.layout.layout);
rv.setTextViewText(R.id.textView1, text);
rv.setOnClickPendingIntent(R.id.textView1, pi);
AppWidgetManager appWidgetManager = AppWidgetManager
.getInstance(RookieAppWidgetConfigure.this);
appWidgetManager.updateAppWidget(appWidgetId, rv); Intent intent = new Intent();
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
appWidgetId);
RookieAppWidgetConfigure.this.setResult(Activity.RESULT_OK,
intent);
RookieAppWidgetConfigure.this.finish();
}
});
} private int appWidgetId = 0;
}RookieAppWidgetProvider:package pub.rookie;import android.app.Activity;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.widget.RemoteViews;public class RookieAppWidgetProvider extends AppWidgetProvider
{
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds)
{
super.onUpdate(context, appWidgetManager, appWidgetIds); String text = null;
SharedPreferences sp = context.getSharedPreferences(
"rookie_app_widget", Activity.MODE_WORLD_WRITEABLE); for (int appWidgetId : appWidgetIds)
{
text = sp.getString(appWidgetId + "", null);
if (text == null) continue; Intent i = new Intent();
i.setClass(context, DisplayActivity.class);
i.putExtra("text", text);
Uri data = Uri.withAppendedPath(Uri.parse("schemeX"
+ "://widget/id/"), String.valueOf(appWidgetId));
i.setData(data);
PendingIntent pi = PendingIntent.getActivity(context, appWidgetId,
i, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews rv = new RemoteViews(context.getPackageName(),
R.layout.layout);
rv.setTextViewText(R.id.textView1, text);
rv.setOnClickPendingIntent(R.id.textView1, pi);
appWidgetManager.updateAppWidget(appWidgetId, rv);
}
}
}DisplayActivity:package pub.rookie;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;public class DisplayActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display); TextView tv = (TextView) this.findViewById(R.id.textView2); Intent i = this.getIntent();
String text = i.getExtras().getString("text"); tv.setText(text);
}
}
AppWidget