【问题标题】:How to create Listview with help of remoteview?如何在 remoteview 的帮助下创建 Listview?
【发布时间】:2017-11-24 06:56:10
【问题描述】:

我正在尝试借助remoteview 在小部件中制作动态listview,因为我想要小部件中的应用程序图标listview。我想显示来自所有应用程序分开的应用程序的传入通知。我想创建常设通知列表,当用户单击列表视图中的应用程序图标时,将显示该特定通知。我正在使用API 19 获取所有通知并且也成功了,但我不知道如何在带有Remoteviewdrawables(Icons) 的小部件中创建Listview

【问题讨论】:

标签: android listview notifications remoteview


【解决方案1】:

您是否搜索或尝试过在小部件中包含 ListView 的其他示例? 请查看 github 上的 Weather Widget demo

代码:

    public class MyWidgetProvider extends AppWidgetProvider {

    private static HandlerThread sWorkerThread;
    private static Handler sWorkerQueue;

    public MyWidgetProvider() {
        // Start the worker thread
        sWorkerThread = new HandlerThread("MyWidgetProvider-worker");
        sWorkerThread.start();
        sWorkerQueue = new Handler(sWorkerThread.getLooper());
    }

    public void onUpdate(Context context, final AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        for (int i = 0; i < appWidgetIds.length; ++i) {
            ...
            final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
            views.setRemoteAdapter(R.id.lvWidget, svcIntent);

            sWorkerQueue.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    views.setScrollPosition(R.id.list, 3);
                    appWidgetManager.partiallyUpdateAppWidget(appWidgetIds[i], views);
                }

            }, 1000);

            appWidgetManager.updateAppWidget(appWidgetIds[i], views);
            ...
        }
    }
}

如下所示:

请查看github项目及以上示例代码。

【讨论】:

  • @kiturk3 如果这个答案没有解决您的问题,请告诉我,或者请接受它作为正确的答案,以便其他人也可以了解这一点并对其实施有正确的方向。谢谢。
  • 其实我想为三星 Galaxy Note 边缘面板做这个。我已经在另一个问题中阅读了您的相同答案,但这并不完全有效。我不得不调整一些额外的东西,但它确实很有帮助。谢谢你:)
  • 在我回答的 cade 的帮助下,它给了我列表视图,这正是我需要的 70%。只有我必须在其中实现 onclickpendingintent 事件。
  • 好的。那么问题出在哪里呢?您可以使用 onclicklistener 发送您单击的项目的捆绑包。据此,您还可以处理您想要的操作。
  • 这是另一个有用的答案:stackoverflow.com/a/6093753/2180161 - 我更容易理解这个
【解决方案2】:

我已经从@iDroid Explorer 的解决方案中尝试过他之前的一个答案。但是列表视图没有显示在边缘面板中(PS:我希望在 Galaxy Note 边缘的面板中实现它)。

所以我尝试了下面的代码:

    private RemoteViews updateWidgetListView(Context arg0, int i) {

        //which layout to show on widget
        RemoteViews remoteViews = new RemoteViews(arg0.getPackageName(),
                R.layout.activity_main_sub);

        //RemoteViews Service needed to provide adapter for ListView
        Log.d("fff", "updateWidget: "+ i);

        Intent svcIntent = new Intent(arg0, MyService.class);

        //passing app widget id to that RemoteViews Service
        svcIntent.putExtra("Id", i);
        Log.d("fff", "receiver:"+appnM);
        svcIntent.putExtra("appname", appnM);
        //setting a unique Uri to the intent
        //don't know its purpose to me right now
        svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
        //setting adapter to listview of the widget

        remoteViews.setRemoteAdapter(i, R.id.list_icon,svcIntent);

//      remoteViews.setRemoteAdapter(i, svcIntent);

        arg0.startService(svcIntent);
        //setting an empty view in case of no data
        remoteViews.setEmptyView(R.id.list_icon, R.id.empty_view);

        Log.d("fff","end of myReceiver");
        return remoteViews;
    }

在 myService 类中,我已经在列表中填充了所需的项目。

我从一个名为 WidgetListView1 的示例中获得了帮助,这是我从随机搜索中找到的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多