我已经检查了所有其他已解决的问题,但没有人解决我的问题。如果有人能帮助我,那将是美好的。提前谢谢。
我正在使用带有1列的GridView。 我想打开GridView上的MainActivity.class或单击项目。 目前它不工作,我不明白原因。 这是我的小部件提供程序类:
public class BakingWidgetProvider extends AppWidgetProvider {
final String myClickEvent = "click";
void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
RemoteViews remoteViews = getRecipeGridRemoteView(context);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
public RemoteViews getRecipeGridRemoteView(Context context) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.baking_widget_provider);
Intent gridIntent = new Intent(context, GridWidgetService.class);
views.setRemoteAdapter(R.id.grid, gridIntent);
Intent appIntent = new Intent(context, MainActivity.class);
PendingIntent intent = PendingIntent.getActivity(context, 0, appIntent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickFillInIntent(R.id.ingredient_widget_layout, appIntent);
views.setOnClickPendingIntent(R.id.ingredient_widget_layout, getPendingSelfIntent(context, myClickEvent));
return views;
}
protected PendingIntent getPendingSelfIntent(Context context, String action) {
Intent intent = new Intent(context, getClass());
intent.setAction(action);
return PendingIntent.getBroadcast(context, 0, intent, 0);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager,
int appWidgetId, Bundle newOptions) {
updateAppWidget(context, appWidgetManager, appWidgetId);
super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions);
}
@Override
public void onEnabled(Context context) {
}
@Override
public void onDisabled(Context context) {
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent != null) {
if ("android.appwidget.action.APPWIDGET_UPDATE".equals(intent.getAction())) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int[] appwidgetIds = appWidgetManager.getAppWidgetIds(
new ComponentName(context, getClass())
);
appWidgetManager.notifyAppWidgetViewDataChanged(appwidgetIds, R.id.grid);
onUpdate(context, appWidgetManager, appwidgetIds);
}
} else if (myClickEvent.equals(intent.getAction())){
Toast.makeText(context, "msg msgasdasd", Toast.LENGTH_SHORT).show();
}
}}
我的gridview适配器类:
public class GridWidgetService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new GridRemoteViewsFactory(this.getApplicationContext(), intent);
}
public class GridRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
ArrayList<Ingredient> ingredientsListGrid;
Food[] foodList;
String latestHeader;
final String be = "bodyItem";
Context mContext;
public GridRemoteViewsFactory(Context mContext, Intent intent) {
this.mContext = mContext;
}
@Override
public void onCreate() {
//foodList = getFoods();
ingredientsListGrid = getIngredients();
Log.wtf("INGREDIENTS SIZE", String.valueOf(ingredientsListGrid.size()));
}
@Override
public void onDataSetChanged() {
// foodList = getFoods();
ingredientsListGrid = getIngredients();
}
@Override
public void onDestroy() {
}
@Override
public int getCount() {
return (ingredientsListGrid != null) ? ingredientsListGrid.size() : 0;
}
private ArrayList<Ingredient> getIngredients() {
Cursor ingredientCursor = mContext.getContentResolver()
.query(ItemsContract.IngredientEntry.CONTENT_URI_INGREDIENT_TABLE,
null,
null,
null,
null);
ArrayList<Ingredient> ingredients = new ArrayList<>();
if (ingredientCursor != null) {
while (ingredientCursor.moveToNext()) {
Ingredient ingredient = getIngredientFromCursor(ingredientCursor);
ingredients.add(ingredient);
}
ingredientCursor.close();
}
return ingredients;
}
private Food[] getFoods() {
Uri baseIngredientUri = ItemsContract
.FoodEntry
.CONTENT_URI_FOOD_TABLE.buildUpon().build();
String ingredientUriString = baseIngredientUri.toString();
Uri ingredientUri = Uri.parse(ingredientUriString);
Cursor ingredientCursor = mContext.getContentResolver()
.query(ingredientUri,
null,
null,
null,
null);
Food[] foods = new Food[ingredientCursor.getCount()];
if (ingredientCursor != null) {
while (ingredientCursor.moveToNext()) {
Food food = getFoodFromCursor(ingredientCursor);
foods[ingredientCursor.getPosition()] = (food);
}
ingredientCursor.close();
}
return foods;
}
private Food getFoodByName(String name) {
return null;
}
private Ingredient getIngredientFromCursor(Cursor ingredientCursor) {
Ingredient ingredient = new Ingredient();
ingredient.setIngredient(ingredientCursor.getString(ingredientCursor
.getColumnIndex(ItemsContract.IngredientEntry.COLUMN_INGREDIENT_NAME)));
ingredient.setMeasure(ingredientCursor.getString(ingredientCursor
.getColumnIndex(ItemsContract.IngredientEntry.COLUMN_INGREDIENT_MEASURE)));
ingredient.setQuantity(ingredientCursor.getDouble(ingredientCursor
.getColumnIndex(ItemsContract.IngredientEntry.COLUMN_INGREDIENT_QUANTITY)));
String name = ingredientCursor.getString(ingredientCursor
.getColumnIndex(ItemsContract.IngredientEntry.COLUMNS_FOOD_NAME)).replace("_", " ");
if (ingredientCursor.getPosition() == 0 || !name.equals(latestHeader) || latestHeader == null) { // a sort of Section Header to divide foods ingredients
ingredient.setFoodName(name);
latestHeader = name;
} else {
ingredient.setFoodName(be + name);
}
return ingredient;
}
private Food getFoodFromCursor(Cursor foodCursor) {
Food food = new Food();
food.setServings(foodCursor.getInt(foodCursor
.getColumnIndex(ItemsContract.FoodEntry.COLUMN_FOOD_SERVINGS)));
food.setName(foodCursor.getString(foodCursor
.getColumnIndex(ItemsContract.FoodEntry.COLUMN_FOOD_NAME)).replace("_", " "));
return food;
}
@Override
public RemoteViews getViewAt(int i) {
if (ingredientsListGrid.size() == 0) {
return null;
}
RemoteViews remoteViews = new RemoteViews(mContext.getPackageName(), R.layout.widget_ingredient_item_layout);
// String title = ingredientsListGrid.get(i).getIngredient();
// String measure = ingredientsListGrid.get(i).getMeasure();
// Double quantity = ingredientsListGrid.get(i).getQuantity();
Ingredient ingredient = ingredientsListGrid.get(i);
if (ingredient.getFoodName() != null && !ingredient.getFoodName().contains(be)) {
remoteViews.setTextViewText(R.id.food_name, ingredient.getFoodName());
remoteViews.setViewVisibility(R.id.food_name, View.VISIBLE);
} else {
remoteViews.setViewVisibility(R.id.food_name, View.GONE);
}
remoteViews.setTextViewText(R.id.ingredient_name, ingredientsListGrid.get(i).getIngredient());
remoteViews.setTextViewText(R.id.ingredient_quantity, ingredient.getQuantity() + " " + ingredient.getMeasure());
String foodName = ingredient.getFoodName();
Bundle extras = new Bundle();
extras.putString("foodNmae", foodName);
Intent fillInIntent = new Intent();
fillInIntent.putExtras(extras);
remoteViews.setOnClickFillInIntent(R.id.ingredient_widget_layout, fillInIntent);
return remoteViews;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public boolean hasStableIds() {
return true;
}
}}
这里有什么问题?