7

Android Lollipopまたはそれ以下のOSで問題なく動作するウィジェットアプリがあります。ネクサス5をMarshmallow(アンドロイド6.0)にアップグレードしたとき、私のウィジェットがカスタム行リストビューの読み込みに問題があることがわかりました。ウィジェットには動的なtextViewと動的なlistViewがあります。 textViewは完璧に動作します。リストビューの項目には期待はありません。ウィジェットを追加すると、ローディングフェーズでスタックされます。 Lollipopまたはそれ以下のデバイスで動作していますが、マシュマロで動作しているのとまったく同じコードです。私はマシュマロがまだそれを見つけることができなかった問題を引き起こしていると信じています。誰かが私に間違っていることを見せて、この問題を解決するのを手伝ってくれることを願っています。私はあらゆる種類の助けに感謝しています。ありがとう。appwidget listviewがマシュマロアップグレード後に更新またはロードされない

WidgetProvider.class:

@Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     System.out.println("WidgetProvider.onUpdate()"); 

     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
     final boolean isMaviKart = MainUtils.getCardType(context).equals(Constants.CARD_TYPE_MAVI); 

     try { 
      //set widget id 
      ComponentName thisWidget = new ComponentName(context, WidgetProvider.class); 
      int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 
      MainUtils.setWidgetID(prefs, allWidgetIds[allWidgetIds.length - 1]); 

      for (int i = 0; i < appWidgetIds.length; i++) { 
       Intent intentService = new Intent(context, WidgetService.class); 

       intentService.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 
       intentService.setData(Uri.parse(intentService.toUri(Intent.URI_INTENT_SCHEME))); 

       RemoteViews widget = new RemoteViews(context.getPackageName(), R.layout.widget); 
       widget.setRemoteAdapter(appWidgetIds[i], R.id.list_view, intentService); 

       Intent clickIntent = new Intent(context, MainActivity.class); 
       PendingIntent clickPI = PendingIntent.getActivity(context, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

       widget.setPendingIntentTemplate(R.id.list_view, clickPI); 

       if (isMaviKart) { 
        widget.setTextViewText(R.id.kalanPara, String.valueOf(MainUtils.getTokenPass(prefs))); 
        widget.setTextViewText(R.id.currency_tl, " Geçiş"); 
       } 
       else { 
        widget.setTextViewText(R.id.kalanPara, String.valueOf(MainUtils.getTotalMoney(prefs))); 
        widget.setTextViewText(R.id.currency_tl, " TL"); 
       } 

       appWidgetManager.updateAppWidget(appWidgetIds[i], widget); 
      } 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      Toast.makeText(context, context.getResources().getString(R.string.error_occured), Toast.LENGTH_SHORT).show(); 
     } 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 
    } 


    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 
     System.out.println("WidgetProvider.onReceive()"); 

     String key = intent.getStringExtra(Constants.EXTRA); 
     if (key != null) 
      Log.e("TEST", key); 

    } 

WidgetViewsFactory.class:

@Override 
    public RemoteViews getViewAt(int position) { 

     Intent intent = new Intent(); 
     Bundle extras = new Bundle(); 

     rowButton = context.getResources().getIdentifier("widget_button","id", context.getPackageName()); 
     rowText = context.getResources().getIdentifier("widget_textview","id", context.getPackageName()); 

     RemoteViews row = new RemoteViews(context.getPackageName(), R.layout.row); 

     // set BUTTON NAMES 
     row.setTextViewText(rowButton, getFeeTypes(position)); 


     // simple rows: 
     configureRowsInListview(row, position, context.getResources().getColor(R.color.DeepSkyBlue), View.VISIBLE); 




     extras.putString(Constants.EXTRA, getEventKey(position)); 
     intent.putExtras(extras); 
     row.setOnClickFillInIntent(rowButton, intent); 
     row.setOnClickFillInIntent(rowText, intent); 

     return row; 
    } 

WidgetService.class:

public class WidgetService extends RemoteViewsService { 
    @Override 
    public RemoteViewsFactory onGetViewFactory(Intent intent) { 
     return(new WidgetViewsFactory(this.getApplicationContext())); 
    } 
} 

MainActivity.class:(マシュマロ上のキーワードリターンヌル)

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    String keyWord = getIntent().getStringExtra(Constants.EXTRA); 
    if (keyWord == null) { 
     keyWord = "null"; 
     Log.e("onCreate() ", "No data Arrived yet!"); 
    } 
} 

private void updateWidgetScreen(String updateData, String currencyType) { 

     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); 
     RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget); 
     ComponentName thisWidget = new ComponentName(this, WidgetProvider.class); 
     remoteViews.setTextViewText(R.id.kalanPara, updateData); 
     remoteViews.setTextViewText(R.id.currency_tl, currencyType); 

     Intent intent = new Intent(this, WidgetService.class); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, MainUtils.getWidgetID(prefs)); 
     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
     remoteViews.setRemoteAdapter(MainUtils.getWidgetID(prefs), R.id.list_view, intent); 

     Intent clickIntent = new Intent(this, MainActivity.class); 
     PendingIntent clickPI = PendingIntent.getActivity(this, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     remoteViews.setPendingIntentTemplate(R.id.list_view, clickPI); 
     appWidgetManager.updateAppWidget(thisWidget, remoteViews); 

     Log.e("updateWidgetScreen", updateData+" updateData - widgetid: "+ MainUtils.getWidgetID(prefs)); 
    } 

ListViewの行の問題: enter image description here

+1

リンクがソースコードにあると考えられました。 smh。元のコードなしでアンドロイドアプリを修正するにはあまりにも難しいです。 – napkinsterror

答えて

0

私は私が作ったエラーを検出しました。私は、スタイルandroid:style/Widget.Material.ButtonのButtonを持つカスタムリストビューを持っていました。ボタンのスタイルを削除すると、問題が修正されました。

<Button 
      android:id="@+id/widget_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:text="Button" 
      android:layout_marginRight="10dp" 
      android:gravity="center" 
      android:padding="8dp" 
      android:textColor="@color/White" 
      **style="@style/MaterialButton"** 
      /> 

<style name="MaterialButton" parent="android:style/Widget.Material.Button"> 
     <item name="android:background">@drawable/raised_button_background</item> 
</style> 
関連する問題