Виджет с автозаполнением TextView - PullRequest
0 голосов
/ 11 марта 2012

Я хочу создать виджет, который при нажатии открывает диалог с autocompletetextview (ОТ main.class) и выполняет функции из mainclass. Вот мой класс виджетов и, пожалуйста, скажите мне, что добавить в android manifest , ТНХ

 public class AppWidget extends AppWidgetProvider
 {
@Override
public void onReceive(Context ctxt, Intent intent)
{
    if(intent.getAction()==null)
    {
        ctxt.startService(new Intent(ctxt,ToggleService.class));
    }
    else
    {
        super.onReceive(ctxt, intent);
    }

}

@Override
public void onUpdate(Context context,AppWidgetManager appWidgetManager, int [] appWidgetIds)
{
    context.startService(new Intent(context,ToggleService.class));
    //RemoteViews buildUpdate(context);
}

public static class ToggleService extends IntentService
    {
    public ToggleService() {
        super("AppWidget$ToggleService");

        }



@Override
protected void onHandleIntent(Intent intent)
{
    ComponentName me = new ComponentName(this,AppWidget.class);
    AppWidgetManager mgr= AppWidgetManager.getInstance(this);
    mgr.updateAppWidget(me,buildUpdate(this));
}

private RemoteViews buildUpdate(Context context)
{
    RemoteViews updateViews=new RemoteViews(context.getPackageName(),R.layout.widget);


    Intent i=new Intent(this, AppWidget.class);
    PendingIntent pi= PendingIntent.getBroadcast(context,0, i,0);
    updateViews.setOnClickPendingIntent(R.id.phoneState,pi);
    return updateViews;
}

} }

widgetxml //

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

<ImageView 

     android:id="@+id/phoneState"

     android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:layout_centerInParent="true"
        android:src="@drawable/ic_launcher"
    />



</RelativeLayout>

// и widget_provider.xml в res / xml

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

    android:minWidth="79px"
    android:minHeight="79px"
    android:updatePeriodMillis="1800000"
    android:initialLayout="@layout/widget">


<TextView

 android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Loading..." />

// и часть из моего манифеста

   <receiver android:name=".AppWidget"
        android:label="Caller"
        android:icon="@drawable/ic_launcher" >
        <intent-filter >
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />

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

    </receiver>
    <service android:name=".AppWidget$ToggleService"  />   

1 Ответ

1 голос
/ 11 марта 2012

Обновите файл manifest.xml

<receiver android:name=".AppWidget"
        android:label="Caller"
        android:icon="@drawable/ic_launcher" >
        <intent-filter >
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
 <action android:name="com.app.example.MyWidget.ACTION_WIDGET_CLICK_RECEIVER"/>

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

    </receiver>
    <service android:name=".AppWidget$ToggleService"  />   

и обновите AppWidgetProvider:

public class MyWidget extends AppWidgetProvider {
        public static String ACTION_WIDGET_CLICK_RECEIVER = "ActionReceiverWidget";

        public static int appid[];
        public static RemoteViews rview;
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
                int[] appWidgetIds){
            updateWidgetState(context, ""); 
        }
        @Override
        public void onReceive(Context paramContext, Intent paramIntent)
          {
             String str = paramIntent.getAction();
            if (paramIntent.getAction().equals(ACTION_WIDGET_CLICK_RECEIVER)) {
                updateWidgetState(paramContext, str);   
            }
            else
            {
                    if ("android.appwidget.action.APPWIDGET_DELETED".equals(str))
                      {
                        int i = paramIntent.getExtras().getInt("appWidgetId", 0);
                        if (i == 0)
                        {

                        }
                        else
                        {
                            int[] arrayOfInt = new int[1];
                            arrayOfInt[0] = i;
                            onDeleted(paramContext, arrayOfInt);
                        }
                      }
              super.onReceive(paramContext, paramIntent);
            }
          }
         static void updateWidgetState(Context paramContext, String paramString)
          {
            RemoteViews localRemoteViews = buildUpdate(paramContext, paramString);
            ComponentName localComponentName = new ComponentName(paramContext, MyWidget.class);
            AppWidgetManager.getInstance(paramContext).updateAppWidget(localComponentName, localRemoteViews);
          }
         private static RemoteViews buildUpdate(Context paramContext, String paramString)
          {
            // Toast.makeText(paramContext, "buildUpdate() ::"+paramString, Toast.LENGTH_SHORT).show();
            rview = new RemoteViews(paramContext.getPackageName(), R.layout.widget_layout);
            Intent active = new Intent(paramContext, MyWidget.class);
            active.setAction(ACTION_WIDGET_RECEIVER);
            active.putExtra("msg", "Message for Button 1");
            PendingIntent configPendingIntent = PendingIntent.getActivity(paramContext, 0, active, 0);
            rmViews.setOnClickPendingIntent(R.id.buttonus1, configPendingIntent);
            if(parmString.equals(ACTION_WIDGET_CLICK_RECEIVER))
            {

               //open a dialog with a autocompletetextview
             //your code for update and what you want on button click

            }  
             return rview; 
          }
        @Override
        public void onEnabled(Context context){
            super.onEnabled(context);
           // Toast.makeText(context, "onEnabled()  ", Toast.LENGTH_SHORT).show();
        }
        // Called each time an instance of the App Widget is removed from the host
        @Override
        public void onDeleted(Context context, int [] appWidgetId){
            super.onDeleted(context, appWidgetId);
           // Toast.makeText(context, "onDeleted()  ", Toast.LENGTH_SHORT).show();
        }
        // Called when last instance of App Widget is deleted from the App Widget host.
        @Override
        public void onDisabled(Context context) {
            super.onDisabled(context);
           // Toast.makeText(context, "onDisabled()  ", Toast.LENGTH_SHORT).show();
        }

    }
...