gpt4 book ai didi

android - 将数据发送到我的(主屏幕)小部件

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:32 26 4
gpt4 key购买 nike

我在将数据(字符串)从我的 Activity 发送到我的 appWidgetProvide 类时遇到了一些问题。

我有一个名为 updateWidget 的方法。当小部件首次放置在主屏幕中时,小部件配置 Activity 会调用此方法。当用户将数据输入到该 Activity 时,当它从我的一个 Activity 接收数据时,onReceive 方法也会调用此方法。

这是我的问题:小部件被放置在主屏幕上,所有数据都在正确的位置。但是当我的 Activity 发送数据时 onReceive (使用 Intent 和额外)数据没有通过。我只是在 extras.getString 上得到一个空字符串。

我之前使用 Intent 在 Activity 之间发送数据,当我将数据发送到小部件提供类时是否需要做一些不同的事情?还是我只是愚蠢而遗漏了一些明显的东西?

我附上了(我认为是)相关的代码。如果您需要任何说明或更多代码,请告诉我。

感谢您花时间阅读本文并感谢您提供的任何帮助,

干杯罗刹

小部件配置类中的 onListItemClick。

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);

Cursor note = mDbHelper.fetchNote(id);
startManagingCursor(note);
String title = note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE));
String text = note.getString(note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY));
loadData(title);


Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK,resultValue);
finish();
}



void loadData(String title) {

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);

SingleNote.updateWidget(this, appWidgetManager, mAppWidgetId, title);

}

将数据发送到 onReceive 的 Intent (这是我的一个 Activity 类中的)

private void updateWidget() { 
Intent i = new Intent(this, SingleNote.class);
i.setAction(SingleNote.UPDATE_ACTION);
Toast.makeText(getApplicationContext(),mTitleText.getText()+"from the activity",
Toast.LENGTH_SHORT).show();//This works just fine
i.putExtra("title", mTitleText.getText());
sendBroadcast(i);

}

我的小部件提供类

public class SingleNote extends AppWidgetProvider {

public static String UPDATE_ACTION = "ActionUpdateSinglenoteWidget";
private static NotesDbAdapter mDbHelper;



public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;

// Perform this loop procedure for each App Widget that belongs to this provider
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];



// Tell the AppWidgetManager to perform an update on the current app widget
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.singlenote_widget);
appWidgetManager.updateAppWidget(appWidgetId, views);




}
}

@Override
public void onReceive(Context context, Intent intent) {

String action = intent.getAction();
Bundle extras = intent.getExtras();
String title1 = extras.getString("title");//this value does not come through
Toast.makeText(context, title1,Toast.LENGTH_LONG).show();//this gives an empty space

if (action != null && action.equals(UPDATE_ACTION)) {
final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName name = new ComponentName(context, SingleNote.class);
int[] appWidgetId = AppWidgetManager.getInstance(context).getAppWidgetIds(name);
final int N = appWidgetId.length;
if (N < 1)
{
return ;
}
else {
int id = appWidgetId[N-1];
updateWidget(context, appWidgetManager, id ,title1);
}
}

else {
super.onReceive(context, intent);
}
}



static void updateWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId, String title){

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.singlenote_widget);
views.setTextViewText(R.id.single_note_title, title);
appWidgetManager.updateAppWidget(appWidgetId, views);



}

最佳答案

我建议尝试用 i.putExtra("title", mTitleText.getText().toString());

String title1 = extras.getString("title");

需要字符串,并且 mTitleText.getText() 返回 Editable - 这可能是不匹配

关于android - 将数据发送到我的(主屏幕)小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17434898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com