2013-05-22 2 views
0

"위젯로드 문제"오류가 발생합니다. 숫자 값 1과 2를 단순히 뒤집는 위젯을 만들려고했지만로드되지 않았습니다. 또한, 내 logcat은 비어 있으므로 문제를 파악할 수 없습니다. 위젯을 다시 설치했지만 여전히 같은 문제가 발생하여 프로젝트를 청소하려고했습니다. 여기 위젯이 홈 화면에로드되지 않음

내 DemoUI.java XML 내부

package com.example.widget2; 

import android.app.PendingIntent; 
import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.RemoteViews; 
import android.widget.Toast; 


public class DemoUI extends AppWidgetProvider { 

    public static String MY_WIDGET_UPDATE="ACTION_BUTTON1"; 
    RemoteViews remoteViews; 

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

     if(intent.getAction().equals(MY_WIDGET_UPDATE)){ 

      Bundle b = intent.getExtras(); 
      if(b != null) { 
       int num = (Integer) b.get("num"); 
       Toast.makeText(context, num, Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

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

     int num=1; 
     ComponentName comp=new ComponentName(context,DemoUI.class); 
     int []allWidgetIds=appWidgetManager.getAppWidgetIds(comp); 

     for(int widgetIds:allWidgetIds){ 
      //num=(num+1)%3; 
      num++; 
      remoteViews=new RemoteViews(context.getPackageName(),R.layout.main); 
      Log.w("WidgetExample2",String.valueOf(num)); 
      remoteViews.setTextViewText(R.id.text1, String.valueOf(num)); 

      //register listener 
      Intent intent=new Intent(context,DemoUI.class); 
      //intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
      intent.setAction(MY_WIDGET_UPDATE); 
      //intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); 
      intent.putExtra("num", num++); 

      PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
      remoteViews.setOnClickPendingIntent(R.id.button1, pendingIntent); 

      //committing changes to the widget 
      appWidgetManager.updateAppWidget(widgetIds, remoteViews); 

     } 
    } 

} 

// 레이아웃 폴더 안에 내 매니페스트

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.widget2" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <receiver android:name="com.example.widget2.DemoUI"> 
      <intent-filter > 
       <action 
        android:name="android.appwidget.action.APPWIDGET_UPDATE"/> 
      </intent-filter> 

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

     </receiver> 
    </application> 

</manifest> 

//main.xml

<?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" > 

    <View 
     android:layout_width="1dp" 
     android:layout_height="30dp"/> 

    <TextView 
     android:id="@+id/text1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="@string/someText" 
     /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/refresh" 
     android:layout_gravity="center" 
     android:onClick="showText" 
     /> 

    <CheckBox 
     android:id="@+id/check" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/update" 
     android:layout_gravity="center" 
     android:onClick="UpdateAutomatically" 

     /> 


</LinearLayout> 

//info.xml입니다 폴더

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 

    android:initialLayout="@layout/main" 
    android:minWidth="146dp" 
    android:minHeight="72dp" 
    android:updatePeriodMillis="300000" 
       > 
</appwidget-provider> 

답변

2

두 가지 : 당신은 RemoteViews

에 의해

  • Checkbox ES가 지원되지 않는 위젯을 앱에 Views를 추가 레이아웃에서 그들을 제거하고 사용자가 설정해야 할 수

    • .

      또한 을 제거 할 수 있습니다. 그게 로딩 오류를 일으키는 지 확신 할 수 없지만, RemoteViews에서는 확실히 쓸모가 없습니다.

  • +0

    thanks..it worked .. – Atihska

    +0

    새로 고침 버튼을 클릭 할 때 1에서 2 사이의 값을 뒤집는 플리퍼를 만들고 있습니다. 버튼을 클릭하면 아무런 동작도 수행되지 않습니다. – Atihska

    +0

    버튼 1인가요? 어쨌든, 당신은 onOnClickPendingIntent()와 onReceive()를 오버라이드해야합니다. 그에 따라 위젯의 상태를 업데이트하십시오. – ozbek

    관련 문제