我一直在努力实现小部件我的应用程序是 GridView控件。我是新Android开发。我已经搜索互联网上的很多,但找不到任何帮助。我有点坚持在这里,因为这是不显示任何在我的 GridView控件。任何帮助将是AP preciated。
在此先感谢!
这是我的code
公共类MainActivity扩展AppWidgetProvider {公共静态最后弦乐TOAST_ACTION =com.example.widgetdevelopment.TOAST_ACTION;公共静态最后弦乐EXTRA_ITEM =com.example.widgetdevelopment.EXTRA_ITEM;@覆盖公共无效的onReceive(上下文的背景下,意图意图){ AppWidgetManager经理= AppWidgetManager.getInstance(背景); 如果(intent.getAction()。等于(TOAST_ACTION)){ INT appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); INT viewIndex = intent.getIntExtra(EXTRA_ITEM,0); Toast.makeText(背景下,感动观+ viewIndex,Toast.LENGTH_SHORT).show(); } super.onReceive(背景下,意图);}@覆盖公共无效的onUpdate(上下文的背景下,AppWidgetManager appWidgetManager, INT [] appWidgetIds){ 的for(int i = 0; I< appWidgetIds.length ++我){ 意向意图=新意图(背景下,GridWidgetService.class); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetIds [I]); intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); RemoteViews RV =新的RemoteViews(context.getPackageName(),R.layout.activity_main); rv.setRemoteAdapter(appWidgetIds [I],R.id.gridView1,意向); rv.setEmptyView(R.id.gridView1,R.id.empty_view); 意图toastIntent =新意图(背景下,MainActivity.class); toastIntent.setAction(MainActivity.TOAST_ACTION); toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetIds [I]); intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 的PendingIntent toastPendingIntent; toastPendingIntent=PendingIntent.getBroadcast(context,0,toastIntent,PendingIntent.FLAG_UPDATE_CURRENT); rv.setPendingIntentTemplate(R.id.gridView1,toastPendingIntent); appWidgetManager.updateAppWidget(appWidgetIds [I],RV); } super.onUpdate(背景下,appWidgetManager,appWidgetIds);}}
这是我的RemoteViewServices类
公共类GridWidgetService扩展RemoteViewsService {@覆盖公共RemoteViewsFactory onGetViewFactory(意向意图){ // TODO自动生成方法存根 返回新GridRemoteViewsFactory(this.getApplicationContext(),意向);}}公共类GridRemoteViewsFactory实现RemoteViewsFactory {私有静态最终诠释mCount = 10;私人列表< WidgetItem> mWidgetItems =新的ArrayList< WidgetItem>();私人语境mContext;私人诠释mAppWidgetId;公共GridRemoteViewsFactory(上下文的背景下,意图意图){ mContext =背景; mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);}@覆盖公共无效的onCreate(){ 的for(int i = 0; I< mCount;我++){ mWidgetItems.add(新WidgetItem第(i +)!); } 尝试{ 视频下载(3000); }赶上(InterruptedException的E){ e.printStackTrace(); }}@覆盖公共无效onDataSetChanged(){ // TODO自动生成方法存根}@覆盖公共无效的onDestroy(){ // mWidgetItems.clear();}@覆盖公众诠释的getCount(){ // TODO自动生成方法存根 返回mCount;}@覆盖公共RemoteViews getViewAt(INT位置){ RemoteViews RV =新的RemoteViews(mContext.getPackageName(),R.layout.widget_item); rv.setTextViewText(R.id.widget_item,mWidgetItems.get(位置).getSomething()); 捆绑额外=新包(); extras.putInt(MainActivity.EXTRA_ITEM,位置); 意图fillInIntent =新的Intent(); fillInIntent.putExtras(临时演员); rv.setOnClickFillInIntent(R.id.widget_item,fillInIntent); 返回rv;}@覆盖公共RemoteViews getLoadingView(){ // TODO自动生成方法存根 返回null;}@覆盖公众诠释getViewTypeCount(){ // TODO自动生成方法存根 返回2;}@覆盖众长getItemId(INT位置){ // TODO自动生成方法存根 返回0;}@覆盖公共布尔hasStableIds(){ // TODO自动生成方法存根 返回true;}}
这是我的对象类。
公共类WidgetItem {字符串的东西;公共WidgetItem(字符串的东西){超();this.something =东西;}公共字符串getSomething(){返回的东西;}公共无效setSomething(字符串的东西){this.something =东西;}}
Widget_item XML
<的RelativeLayout的xmlns:机器人=http://schemas.android.com/apk/res/android的xmlns:工具=http://schemas.android.com/tools机器人:layout_width =match_parent机器人:layout_height =match_parent机器人:paddingBottom会=@扪/ activity_vertical_margin机器人:paddingLeft =@扪/ activity_horizontal_margin机器人:paddingRight =@扪/ activity_horizontal_margin机器人:paddingTop =@扪/ activity_vertical_margin工具:上下文=com.example.widgetdevelopment.MainActivity> <的TextView 机器人:ID =@ + ID / widget_item 机器人:layout_width =WRAP_CONTENT 机器人:layout_height =WRAP_CONTENT 机器人:文字=@字符串/参考hello world/> < / RelativeLayout的>
Main_Activity布局(这种布局是widget的包含布局的 GridView控件)
<的RelativeLayout的xmlns:机器人=http://schemas.android.com/apk/res/android 的xmlns:工具=http://schemas.android.com/tools 机器人:layout_width =match_parent 机器人:layout_height =match_parent 机器人:重力=顶 机器人:paddingBottom会=@扪/ activity_vertical_margin 机器人:paddingLeft =@扪/ activity_horizontal_margin 机器人:paddingRight =@扪/ activity_horizontal_margin 机器人:paddingTop =@扪/ activity_vertical_margin 工具:上下文=MainActivity。> <的TextView 机器人:ID =@ + ID / textView1 机器人:layout_width =WRAP_CONTENT 机器人:layout_height =WRAP_CONTENT 机器人:layout_alignParentLeft =真 机器人:layout_alignParentTop =真 机器人:文字=@字符串/网站 机器人:textAppearance =机器人:ATTR / textAppearanceMedium/> <按钮 机器人:ID =@ + ID /按钮1 机器人:layout_width =WRAP_CONTENT 机器人:layout_height =WRAP_CONTENT 机器人:layout_alignLeft =@ + ID / textView1 机器人:layout_below =@ + ID / textView1 机器人:文字=@字符串/ APP_NAME/> < GridView控件 机器人:ID =@ + ID / gridView1 机器人:layout_width =150dp 机器人:layout_height =100dp 机器人:layout_alignLeft =@ + ID /按钮1 机器人:layout_alignParentRight =真 机器人:layout_below =@ + ID /按钮1 机器人:为numColumns =3> < / GridView的> <的TextView 机器人:ID =@ + ID / empty_view 机器人:layout_width =match_parent 机器人:layout_height =match_parent 机器人:比重=中心 机器人:文字颜色=#FFFFFF 机器人:文字样式=大胆 机器人:文字=empty_view_text 机器人:TEXTSIZE =20SP/> < / RelativeLayout的>
解决方案
你有注册的服务在AndroidManifest.xml?像这样的:
<服务机器人:名字=GridWidgetService 机器人:权限=android.permission.BIND_REMOTEVIEWS/>
I have been trying to implement widget for my application with GridView . I am new to Android Development. I have searched a lot on internet but could not find anything helpful. I am kind of stuck here , as this is not showing anything on my GridView . Any help would be appreciated.
Thanks in advance !
This is my Code
public class MainActivity extends AppWidgetProvider{
public static final String TOAST_ACTION = "com.example.widgetdevelopment.TOAST_ACTION";
public static final String EXTRA_ITEM = "com.example.widgetdevelopment.EXTRA_ITEM";
@Override
public void onReceive(Context context, Intent intent) {
AppWidgetManager mgr = AppWidgetManager.getInstance(context);
if (intent.getAction().equals(TOAST_ACTION)) {
int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
int viewIndex = intent.getIntExtra(EXTRA_ITEM, 0);
Toast.makeText(context, "Touched view " + viewIndex, Toast.LENGTH_SHORT).show();
}
super.onReceive(context, intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
for (int i = 0; i < appWidgetIds.length; ++i) {
Intent intent = new Intent(context, GridWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.activity_main);
rv.setRemoteAdapter(appWidgetIds[i], R.id.gridView1, intent);
rv.setEmptyView(R.id.gridView1, R.id.empty_view);
Intent toastIntent = new Intent(context, MainActivity.class);
toastIntent.setAction(MainActivity.TOAST_ACTION);
toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent toastPendingIntent;
toastPendingIntent=PendingIntent.getBroadcast(context,0,toastIntent,PendingIntent.FLAG_UPDATE_CURRENT);
rv.setPendingIntentTemplate(R.id.gridView1, toastPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
This is my RemoteViewServices Class
public class GridWidgetService extends RemoteViewsService{
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
// TODO Auto-generated method stub
return new GridRemoteViewsFactory(this.getApplicationContext(), intent);
}
}
public class GridRemoteViewsFactory implements RemoteViewsFactory {
private static final int mCount = 10;
private List<WidgetItem> mWidgetItems = new ArrayList<WidgetItem>();
private Context mContext;
private int mAppWidgetId;
public GridRemoteViewsFactory(Context context, Intent intent) {
mContext = context;
mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
@Override
public void onCreate() {
for (int i = 0; i < mCount; i++) {
mWidgetItems.add(new WidgetItem(i + "!"));
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void onDataSetChanged() {
// TODO Auto-generated method stub
}
@Override
public void onDestroy() {
// mWidgetItems.clear();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mCount;
}
@Override
public RemoteViews getViewAt(int position) {
RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);
rv.setTextViewText(R.id.widget_item, mWidgetItems.get(position).getSomething());
Bundle extras = new Bundle();
extras.putInt(MainActivity.EXTRA_ITEM, position);
Intent fillInIntent = new Intent();
fillInIntent.putExtras(extras);
rv.setOnClickFillInIntent(R.id.widget_item, fillInIntent);
return rv;
}
@Override
public RemoteViews getLoadingView() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 2;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
}
This is my Object class .
public class WidgetItem {
String something;
public WidgetItem(String something) {
super();
this.something = something;
}
public String getSomething() {
return something;
}
public void setSomething(String something) {
this.something = something;
}
}
Widget_item XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.widgetdevelopment.MainActivity" >
<TextView
android:id="@+id/widget_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
Main_Activity Layout (this layout is the layout of the Widget containing GridView )
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/website"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:text="@string/app_name" />
<GridView
android:id="@+id/gridView1"
android:layout_width="150dp"
android:layout_height="100dp"
android:layout_alignLeft="@+id/button1"
android:layout_alignParentRight="true"
android:layout_below="@+id/button1"
android:numColumns="3" >
</GridView>
<TextView
android:id="@+id/empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="#ffffff"
android:textStyle="bold"
android:text="empty_view_text"
android:textSize="20sp" />
</RelativeLayout>
解决方案
Have you registered service in the AndroidManifest.xml? Like this :
<service android:name="GridWidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS" />
相关推荐
最新文章