2017-07-30 3 views
0

ウィジェットのアイテム(文字列)のリストを表示するはずのAndroidアプリケーションを作成していますが、何らかの理由でそれを動作させることができません。Androidウィジェットにデータが表示されない

コード

ウィジェット成分

package com.example.vamshi.baking.Widget; 

import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.widget.RemoteViews; 

import com.example.vamshi.baking.R; 
import com.example.vamshi.baking.Widget.Service.WidgetService; 

/** 
* Implementation of App Widget functionality. 
*/ 
public class Ingredients extends AppWidgetProvider { 

    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, 
           int appWidgetId) { 

     CharSequence widgetText = context.getString(R.string.appwidget_text); 
     // Construct the RemoteViews object 
     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.ingredients); 


     // Instruct the widget manager to update the widget 
     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     // There may be multiple widgets active, so update all of them 
     final int N = appWidgetIds.length; 
     for (int i = 0; i<N; ++i) { 
      RemoteViews remoteViews = updateWidgetListView(context, 
        appWidgetIds[i]); 
      appWidgetManager.updateAppWidget(appWidgetIds[i], 
        remoteViews); 
     } 

    } 

    private RemoteViews updateWidgetListView(Context context, int appWidgetId) { 
     RemoteViews remoteViews = new RemoteViews(
       context.getPackageName(),R.layout.ingredients); 

     //RemoteViews Service needed to provide adapter for ListView 
     Intent svcIntent = new Intent(context, WidgetService.class); 
     //passing app widget id to that RemoteViews Service 
     svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     //setting a unique Uri to the intent 
     //don't know its purpose to me right now 
     svcIntent.setData(Uri.parse(
       svcIntent.toUri(Intent.URI_INTENT_SCHEME))); 
     //setting adapter to listview of the widget 
     remoteViews.setRemoteAdapter(R.id.list_view_widget, 
       svcIntent); 

     return remoteViews; 
    } 

    @Override 
    public void onEnabled(Context context) { 
     // Enter relevant functionality for when the first widget is created 
    } 

    @Override 
    public void onDisabled(Context context) { 
     // Enter relevant functionality for when the last widget is disabled 
    } 
} 

ウィジェットサービス

package com.example.vamshi.baking.Widget.Service; 

import android.appwidget.AppWidgetManager; 
import android.content.Intent; 
import android.widget.RemoteViewsService; 

import com.example.vamshi.baking.Widget.WidgetViewAdapter; 

/** 
* Created by Vamshi on 7/27/2017. 
*/ 

public class WidgetService extends RemoteViewsService { 

    @Override 
    public RemoteViewsFactory onGetViewFactory(Intent intent) { 
     int appWidgetID = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 
       AppWidgetManager.INVALID_APPWIDGET_ID); 
     return (new WidgetViewAdapter(this.getApplicationContext(), intent)); 
    } 
} 

ウィジェットビュー・アダプタ

package com.example.vamshi.baking.Widget; 

import android.appwidget.AppWidgetManager; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.RemoteViews; 
import android.widget.RemoteViewsService; 
import android.widget.Toast; 

import com.example.vamshi.baking.Data.*; 
import com.example.vamshi.baking.Data.Ingredients; 
import com.example.vamshi.baking.R; 
import com.example.vamshi.baking.Retrofit.IRecipe; 
import com.example.vamshi.baking.Retrofit.RetrofitBuilder; 

import java.util.ArrayList; 

import retrofit2.Call; 
import retrofit2.Callback; 
import retrofit2.Response; 

/** 
* Created by Vamshi on 7/27/2017. 
*/ 

public class WidgetViewAdapter implements RemoteViewsService.RemoteViewsFactory { 

    Context context; 
    ArrayList<Recipe> r; 
    ArrayList<com.example.vamshi.baking.Data.Ingredients> i; 
    private int appWidgetID; 
    ArrayList<String> iList; 

    public WidgetViewAdapter(Context c, Intent in){ 
     populate(); 
     this.context = c; 
     appWidgetID = in.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 
       AppWidgetManager.INVALID_APPWIDGET_ID); 

    } 

    private void populate() { 

     IRecipe irecipie = RetrofitBuilder.Retrieve(); 
     final Call<ArrayList<Recipe>> recipie = irecipie.getRecipe(); 
     recipie.enqueue(new Callback<ArrayList<Recipe>>() { 
      @Override 
      public void onResponse(Call<ArrayList<Recipe>> call, Response<ArrayList<Recipe>> response) { 
       r = response.body(); 
       i = r.get(0).getIngredients(); 
       for(int j = 0; j<=i.size(); j++){ 
        iList.add(i.get(0).getIngredient()); 
       } 
      } 

      @Override 
      public void onFailure(Call<ArrayList<Recipe>> call, Throwable t) { 
       Toast.makeText(context, "No Internet Connection", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    @Override 
    public void onCreate() { 

     populate(); 
    } 

    @Override 
    public void onDataSetChanged() { 

     IRecipe irecipie = RetrofitBuilder.Retrieve(); 
     final Call<ArrayList<Recipe>> recipie = irecipie.getRecipe(); 
     recipie.enqueue(new Callback<ArrayList<Recipe>>() { 
      @Override 
      public void onResponse(Call<ArrayList<Recipe>> call, Response<ArrayList<Recipe>> response) { 
       r = response.body(); 
       i = r.get(0).getIngredients(); 
       for(int j = 0; j<=i.size(); j++){ 
        iList.add(i.get(0).getIngredient()); 
       } 
      } 

      @Override 
      public void onFailure(Call<ArrayList<Recipe>> call, Throwable t) { 
       Toast.makeText(context, "No Internet Connection", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    } 

    @Override 
    public void onDestroy() { 

    } 

    @Override 
    public int getCount() { 
     return iList.size(); 
    } 

    @Override 
    public RemoteViews getViewAt(int position) { 
     final RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.row); 
     Ingredients in = i.get(position); 
     remoteView.setTextViewText(R.id.text_for_widget, in.getIngredient()); 
     return remoteView; 
    } 

    @Override 
    public RemoteViews getLoadingView() { 
     return null; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return 0; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return false; 
    } 
} 

マニフェスト

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.vamshi.baking"> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

    <service 
     android:name=".WidgetService" 
     android:permission="android.permission.BIND_REMOTEVIEWS" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".UI.MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".UI.SecondScreenDetails" /> 
     <activity android:name=".UI.StepsActivity" /> 
     <activity android:name=".UI.SingleStepItem" /> 

     <receiver android:name=".Widget.BakingWidget"> 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      </intent-filter> 

      <meta-data 
       android:name="android.appwidget.provider" 
       android:resource="@xml/baking_widget_info" /> 
     </receiver> 
     <service 
      android:name=".Widget.Service.WidgetService" 
      android:permission="android.permission.BIND_REMOTEVIEWS" /> 

     <activity android:name=".UI.MasterDetailFlow" /> 

     <receiver android:name=".Widget.Ingredients"> 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      </intent-filter> 

      <meta-data 
       android:name="android.appwidget.provider" 
       android:resource="@xml/ingredients_info" /> 
     </receiver> 
    </application> 

</manifest> 

レイアウトファイル

Ingredients.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="@dimen/widget_margin"> 

    <ListView 
     android:id="@+id/list_view_widget" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    </ListView> 

</LinearLayout> 

row.xmlあなたのウィジェットビュー・アダプタには、事前

+0

を参照できる必要包みだから私はここにリンクを掲載しています それを行う方法を完全に証明する素晴らしい記事を参照ました[状況がかもしれないものの下で私は「緊急」または他の同様のフレーズを私の質問にordeで追加しますより速い回答を得るためには?](// meta.stackoverflow.com/q/326569) - これはボランティアに対処する理想的な方法ではなく、おそらく答えを得ることに逆効果があるということです。これをあなたの質問に追加しないでください。 – halfer

答えて

0

私の目的は私が何であったかを見つけ出すには、トラブルのかなり多くを持っていたリストビュー のために行かなければならなかったウィジェット に文字列のリストを表示することだったとウィジェット以来リサイクルビューが を表示することはできません。問題 しかし、私はあなたのいずれかが助けをお読みください。この

https://dharmangsoni.blogspot.in/2014/03/collection-widget-with-event-handling.html

0

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/text_for_widget" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

おかげで作るgetViewTypeCountリターン1.

@Override 
public int getViewTypeCount() { 
    return 1; 
} 

このメソッドは、そのファクトリを提供するビューの種類の数を提供します。 さらに、IntentServiceでネットワークコールを行い、応答本体 をRemoteViewsServiceの目的で渡し、このサービスがViewsFactoryでそのインテントを渡した後、ViewsFactoryがIngredientsのリストを取り込めるようにすることをお勧めします。

関連する問題