2012-06-13 14 views
10

私は構成アクティビティを持つウィジェットを持っています。ユーザがホーム画面にウィジェットを配置したい場合、configureアクティビティが開き、ユーザはウィジェットのコンテンツ、背景色、およびテキストカラーを選択し、それがあります。アプリを再インストールすると、ウィジェットが見えなくなります。まだそこにありますが、テキストと色はありません。 img: enter image description here再インストール後にウィジェットが見えなくなる

すべてのファイルを投稿し、最後に問題の原因を教えてください。私が知らないことは解決策です。

widgetconfigure.xml

これは、構成acitivtyのレイアウトです。私はこのXMLを投稿するつもりはありません。それはレイアウトでtextviewsを持っています。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="72dip" 
    android:layout_height="72dip" 
    android:layout_gravity="center" 
    android:id="@+id/widgetlayout"> 

    <ImageView android:id="@+id/ImageView01" 
    android:layout_width="72dip" 
    android:layout_height="72dip" 
    android:scaleType="fitXY"> 
    </ImageView> 

    <TextView 
     android:id="@+id/tvConfigInput" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:gravity="left" 
     android:textColor="#FFFFFF" 
     android:layout_marginLeft="3dip" 
     android:layout_marginRight="3dip" 
     android:textSize="12dip" /> 

</RelativeLayout> 

私は私の構成アクティビティーを登録マニフェストの一部とappwidgetprovider widget_layout.xml:

<activity 
      android:name=".WidgetConfig" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> 
      </intent-filter> 
     </activity> 

     <receiver android:name=".MyWidgetProvider" android:label="@string/app_name"> 

      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action> 
      </intent-filter> 
      <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info"></meta-data> 
     </receiver> 

XML/widget_info.xml

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:initialLayout="@layout/widget_layout" 
    android:minHeight="72dp" 
    android:minWidth="72dp" 
    android:configure="com.b2creative.notepad.WidgetConfig"> 
</appwidget-provider> 

WidgetConfig.java

これは、構成アクティビティーです。ユーザはウィジェットの背景とテキストの色を選択し、リストビューのテキストをウィジェットに表示します。

public class MyWidgetProvider extends AppWidgetProvider { 

     @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 

     super.onUpdate(context, appWidgetManager, appWidgetIds); 
     final int N = appWidgetIds.length; 
     for (int i=0; i<N; i++) 
     { 
      int awID = appWidgetIds[i]; 
      RemoteViews v = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
      //v.setTextViewText(R.id.tvConfigInput, "Something"); 
      appWidgetManager.updateAppWidget(awID, v); 
     } 
    } 

    @Override 
    public void onDeleted(Context context, int[] appWidgetIds) { 
     super.onDeleted(context, appWidgetIds); 
    } 

} 

は、だから私は、私は、レイアウトを設定していないですと問題は、にonUpdate方法で、ここではかなり確信している

 AppWidgetManager awm; 
     int awID; 
     Intent i = getIntent(); 
     Bundle extras = i.getExtras(); 
     if (extras != null) 
     { 
      awID = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
     } 
     else 
     { 
      finish(); 
     } 
     awm = AppWidgetManager.getInstance(c); 


//the code from here is in a button onclicklistener that sets the widget. 

      RemoteViews views = new RemoteViews(c.getPackageName(), R.layout.widget_layout); 
      views.setTextViewText(R.id.tvConfigInput, widgettext); 
      views.setTextColor(R.id.tvConfigInput, loadedtextcolor); 
      views.setFloat(R.id.tvConfigInput, "setTextSize", int_widgetfontsize); 

      Paint p = new Paint(); 
      p.setAntiAlias(true); 
      p.setStyle(Style.FILL); 
      p.setColor(loadedbgcolor); 
      Bitmap bitmap = Bitmap.createBitmap(GetDipsFromPixel(72), GetDipsFromPixel(72), Config.ARGB_8888); 
      Canvas canvas = new Canvas(bitmap); 
      RectF rect = new RectF(0, 0, GetDipsFromPixel(72), GetDipsFromPixel(72)); 
      canvas.drawRoundRect(rect, 10, 10, p); 
      views.setImageViewBitmap(R.id.ImageView01, bitmap); 
      Intent in = new Intent(c, Notepad.class); 
      PendingIntent pi = PendingIntent.getActivity(c, 0, in, 0); 

      Intent result = new Intent(); 
      result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, awID); 
      setResult(RESULT_OK, result); 

      awm.updateAppWidget(awID, views); 

      finish(); 

MyWidgetProvider.java:私は関連部分のみを投稿するつもりですウィジェットの私はそれを追加すれば背景を持たないウィジェットに "Something"というテキストが表示されることを//表示するための行を残しました。

ウィジェットの背景色、ウィジェットのテキストカラー、およびTextViewのテキストをこのメソッドでどのように設定する必要がありますか?私はそれらを知らない、ユーザーはウィジェットを追加するときにそれらを設定します。それとも私は何をすべきですか?

IはWidgetConfig.java内のonClick方法 saveTitlePref(this, AppWidgetManager.INVALID_APPWIDGET_ID, widgettext);を追加し、ユーザが設定acitivtyにOK押下する:私はthisコードを発見し、このような鉱山を変更した

EDIT

widgettextはappwidgetid(AppWidgetManager.INVALID_APPWIDGET_IDを使用するので、appwidgetidとは何か)で保存されます。これが機能するために

私はこの必要:私はこのようなループのために修正MyWidgetProviderクラスで

static void saveTitlePref(Context context, int appWidgetId, String text) { 
      SharedPreferences.Editor prefs = context.getSharedPreferences(PREFS_NAME, 0).edit(); 
      prefs.putString(PREF_PREFIX_KEY + appWidgetId, text); 
      prefs.commit(); 
     } 

を:

私はまだ

static String loadTitlePref(Context context, int appWidgetId) { 
      SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0); 
      String prefix = prefs.getString(PREF_PREFIX_KEY + appWidgetId, null); 
      String nothing = "empty"; 
      if (prefix != null) { 
       return prefix; 
      } else { 
       return nothing; 
      } 
     } 

Itを追加

final int N = appWidgetIds.length; 
    for (int i=0; i<N; i++) 
    { 
     int awID = appWidgetIds[i]; 
     RemoteViews v = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
     //v.setTextViewText(R.id.tvConfigInput, "Something"); 
     v.setTextViewText(R.id.tvConfigInput, loadTitlePref(context, AppWidgetManager.INVALID_APPWIDGET_ID)); 
     appWidgetManager.updateAppWidget(awID, v); 
    } 

動作しませんが、近づいています。別のテキストの2つのウィジェットをホーム画面に置き、次にアプリケーションを再インストールします。両方のウィジェットにはテキストがありますが(もちろん設定しています)、2番目のウィジェットで選択したものと同じテキストを持っています。

私を助けてください。

+0

Noone?私はこれがとても難しい質問であることは知らなかった。私は多くの異なるユーザー設定ウィジェットを持つアプリを見たので、どうすればいいですか? – erdomester

+0

私は構成活動でユーザーが設定した設定でウィジェットを処理する方法を教えてくれる人に100クレジットの賞金を提供しています。 – erdomester

+0

私はこれについて何も考えていませんが、ちょうど考えとして、あなたはAndroidの在庫でそれを試してみましたか?私はこのようないくつかの問題をより早く感じました。これはちょうど間違った方向にあなたを誤解している特定のバグかもしれません – kishu27

答えて

-1

リサイズや移動ウィジェットがいくつかの時間後にそれが表示されるようになります。この問題を解決するために、私は自分のイメージビューにデフォルトイメージを置いてくれました。

関連する問題