2012-05-13 27 views
0

我正尝试使用小部件创建应用程序。当用户将小部件放置在桌面上时,列表视图应该出现一个项目列表。用户选择一个项目,然后使用与该项目相关的相应文本创建小部件。为了简单起见,我现在使用了一个alertdialog。输入文本应该只出现在我创建的窗口小部件中。它不应该出现在其他小部件中。我该怎么做?我还没有发现有关这个。Android添加更多具有不同内容的小部件

的的AppWidgetProvider:

public class MyWidgetProvider extends AppWidgetProvider { 

    private static final String ACTION_CLICK = "ACTION_CLICK"; 

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

     Log.i("INFO", "AppWidgetProvider"); 

     ComponentName thisWidget = new ComponentName(context, MyWidgetProvider.class); 
     int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 
     //Intent intent = new Intent(context.getApplicationContext(), UpdateWidgetService.class); 
     //intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds); 
     //context.startService(intent); 
      Intent intentA = new Intent(context.getApplicationContext(), NoteListToWidget.class); 
    intentA.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(intentA); 

     } 

} 

服务:

public class UpdateWidgetService extends Service { 
    public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget"; 
    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget"; 
    String value; 
    Dialog dialog_newitem; 


    @Override 
    public void onStart(Intent intent, int startId) { 
     Log.i("INFO", "UpdateWidgetService"); 

     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this.getApplicationContext()); 

     int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS); 

     ComponentName thisWidget = new ComponentName(getApplicationContext(), MyWidgetProvider.class); 
     int[] allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget); 

     for (int widgetId : allWidgetIds) { 
      int number = (new Random().nextInt(100)); 
      String v = GlobalVars.getValue(); 
      RemoteViews remoteViews = new RemoteViews(this.getApplicationContext().getPackageName(), R.layout.widget_layout); 
      //remoteViews.setTextViewText(R.id.update, "Random: " + String.valueOf(number)); 
      remoteViews.setTextViewText(R.id.update, v); 

      Intent configIntent = new Intent(this, Notepad.class); 
      configIntent.setAction(ACTION_WIDGET_CONFIGURE); 
      PendingIntent configPendingIntent = PendingIntent.getActivity(this, REQUEST_CODE_ONE, configIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
      remoteViews.setOnClickPendingIntent(R.id.widgetlayout, configPendingIntent); 

      appWidgetManager.updateAppWidget(widgetId, remoteViews); 
     } 
     stopSelf(); 

     super.onStart(intent, startId); 


    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

这与AlertDialog(后者列表视图)的活动:

public class NoteListToWidget extends Activity { 

    Dialog dialog_newitem; 
    EditText et_newitem; 
    String value; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     dialog_newitem = new Dialog(NoteListToWidget.this); 
     dialog_newitem.setContentView(R.layout.dialog_productlists_grp_capitalized); 
     dialog_newitem.setTitle("Select"); 
     dialog_newitem.setCancelable(true); 

     et_newitem = (EditText) dialog_newitem.findViewById(R.id.et_item_name); 

     Button btn_Save = (Button) dialog_newitem.findViewById(R.id.btn_save_pr); 
     btn_Save.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       value = et_newitem.getText().toString(); 
       GlobalVars.setValue(value); 
       dialog_newitem.dismiss(); 
       /* 
       Intent serviceIntent = new Intent(); 
       serviceIntent.setAction("com.myapp.app.UpdateWidgetService"); 
       startService(serviceIntent); 
       */ 
       Intent intent = new Intent(NoteListToWidget.this, com.myapp.app.UpdateWidgetService.class); 
       startService(intent); 

      } 
      }); 


     Button btn_Cancel = (Button) dialog_newitem.findViewById(R.id.btn_cancel_pr); 
     btn_Cancel.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       dialog_newitem.dismiss(); 
      } 

     }); 
     dialog_newitem.show(); 



    } 

} 

我也不怎么和我应该从哪里调用NoteListToWidget活动以及如何使这整个事情工作。

+0

listview不会出现在你的小部件? –

+0

现在,它只是一个对话框。当我创建小部件时,会出现对话框,但主要活动在后台打开。为什么呢? – erdomester

回答

1

首先,不可能全部回答你的问题。这是因为你错过了很多关于app-widgets工作的东西,所以你必须阅读更多关于它们的内容。不过,我会给你一个开始的地方。

所述的AppWidgetProvider的的onUpdate方法被称为每个它已经放置桌面上的应用程序的小部件需要更新时间。也就是说,即使你设法从那里显示你的列表并且用户取消了操作,也没有办法从onUpdate方法中删除你的app-widget。 此外,当onUpdate方法完成时,AppWidgetProvider被销毁,因此即使您设法从那里显示您的列表,也无法获取用户选择的项目。长话短说,你不能做onUpdate方法和你不能做到这一点。

但是,您可以通过在app-widget创建过程的指定点使用配置活动来执行此操作,但这不能在您的问题的上下文中回答,因为您必须首先了解app-widget系统在Android中工作。最好的开始是this link。我和我的第一个app-widget应用程序有同样的问题(几乎和你一样),但后来我开始阅读和阅读,最终在1.5个月后,我设法做出了你想做的事情。所以不要说

我该怎么做?我还没有找到有关这个

并开始阅读,这是与Android的生活。这一切都在上面的链接中,在谷歌代码like this weather widget中也有非常好的开源项目,它允许用户在将它放置在桌面上之前对其进行配置。

希望这有助于...

+0

配置活动解释了一切。发布这个问题后我发现它2小时。有了这个,我可以把我的脚放在正确的路上。我建议大家有这个问题在YouTube上观看新波士顿的160-167视频。这很容易,我花了一个小时才弄清楚我的问题/不好的概念是什么。谢谢Christos! – erdomester

相关问题