ash*_*osh 6 android android-listview onclicklistener android-appwidget
我是android开发的新手。我正在尝试为我的应用程序制作一个小部件,其中将包含一个列表视图,每个列表视图除了标题和内容外还具有2个按钮。
我试图在按下该元素的按钮时(在主屏幕上)隐藏应用程序小部件中listitem的相应元素。
首先,我尝试检查按钮单击是否获得了任何响应,以及是否可以检测到是否可以找到项目的位置。所以我这样做:
listprovider.java(实现remoteviewfactory):
@Override
public RemoteViews getViewAt(int position) {
final RemoteViews remoteView = new RemoteViews(
context.getPackageName(), R.layout.list_row);
ListItem listItem = listItemList.get(position);
remoteView.setTextViewText(R.id.heading, listItem.heading);
remoteView.setTextViewText(R.id.content, listItem.content);
Bundle extras = new Bundle();
extras.putInt(WidgetProvider.EXTRA_ITEM, position);
Intent fillInIntent = new Intent();
fillInIntent.putExtras(extras);
// Make it possible to distinguish the individual on-click
// action of a given item
remoteView.setOnClickFillInIntent(R.id.buttonwidget, fillInIntent);
return remoteView;
}
Run Code Online (Sandbox Code Playgroud)
然后在WidgetProvider.java中(扩展了AppWidgetProvider):
for (int i = 0; i < N; ++i) {
RemoteViews remoteViews = updateWidgetListView(context,
appWidgetIds[i]);
Intent clickIntent = new Intent(context, MainActivity.class);
clickIntent.setAction(WidgetProvider.TOAST_ACTION);
clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
clickIntent.setData(Uri.parse(clickIntent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent clickPI = PendingIntent.getActivity(context, 0,
clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setPendingIntentTemplate(com.example.markup.R.id.listViewWidget, clickPI);
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
Run Code Online (Sandbox Code Playgroud)
该mainActivity.java是程序,在那里我这样做是为了获得该项目位置的默认的活动:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Printing detail of clicked item from widget
Intent intent = getIntent();
if (intent.getAction().equals(WidgetProvider.TOAST_ACTION)) {
int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
int viewIndex = intent.getIntExtra(WidgetProvider.EXTRA_ITEM, 0);
Toast.makeText(getApplicationContext(), "Touched view " + viewIndex, Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "Touched view none ", Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
这样,我就可以通过单击按钮打开主要活动,并在底部获得TOAST文本,从而获得准确的结果。
但是我希望在单击时隐藏/禁用应用程序小部件的相应元素。我该怎么办?
按下按钮时,您必须从适配器中删除列表项。并打电话
adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
然后该项目就会消失。希望这可以有所帮助。
| 归档时间: |
|
| 查看次数: |
2191 次 |
| 最近记录: |