2013-10-14 68 views
3

我有一個基於集合的小部件,我想更改最初的滾動位置。設置一個android小部件的初始sroll位置

我試着在我RemoteViewsFactory以下..

 views.setScrollPosition(R.id.widgetList, myDesiredPosition); 
     AppWidgetManager.getInstance(mContext).partiallyUpdateAppWidget(mAppWidgetId, views); 

,但遺憾的是沒有work..I也試圖設置在我WidgetProvider這一權利,沒有工作,雖然。 所以,請..有沒有辦法如何改變列表視圖的捲動位置包裝到遠景?謝謝..

+0

我得到了同樣的問題。到目前爲止還沒有解決 – bofredo

+0

我開始認爲,這是不可能的..我試着從我的'RemoteViewsFactory'發送一條消息給'WidgetProvider',但問題是我只是不能堅持Wrapping'RemoteViews的原始實例'實例:/ 我目前的「解決方案」是加載只是我想要作爲初始索引開始的項目。 – simekadam

+0

你有沒有設法抓住滾動事件? onClickListener是一塊蛋糕,並且onScrollListener不存在:/ – bofredo

回答

3

我已經在我的RemoteViewsService.RemoteViewsFactory的onDataSetChanged函數中完成了這項工作。我不得不添加一個AsynTask來延遲滾動。如果getLoadingView返回的視圖與getViewAt返回的所有視圖高度相同,則這可能不是必需的。

@Override 
public void onDataSetChanged() { 
    new AsyncTask<Integer, Void, Void>() { 
     @Override 
     protected Void doInBackground(Integer[] params) { 
      int widgetId = params[0]; 
      int count = params[1]; 

      try { 
       Thread.sleep(800); 
      } catch (InterruptedException e) { 
       Log.d(TAG, "Scroll thread was interrupted"); 
      } 
      String packageName = context.getPackageName(); 
      RemoteViews rv = new RemoteViews(packageName, R.layout.widget_layout); 
      rv.setInt(R.id.list_view, "smoothScrollToPosition", count); 
      AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
      appWidgetManager.partiallyUpdateAppWidget(widgetId, rv); 
      return null; 
     } 
    }.execute(this.appWidgetId, this.rowCount); 
}