Android 应用小部件 ListView onclick 监听器

标签 android android-listview onclicklistener android-appwidget

我是安卓开发的新手。我正在尝试为我的应用制作一个包含 ListView 的小部件,每个 ListView 除了标题和内容外还有 2 个按钮。

当按下该元素的按钮时,我试图在应用程序小部件(在主屏幕上)中隐藏列表项的相应元素。

首先,我尝试检查按钮点击是否得到任何响应,以及我是否可以检测到我是否可以获得项目的位置。所以我这样做了:

listprovider.java(实现远程 View 工厂):

@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;
    }

然后在 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);

ma​​inActivity.java 是程序的默认 Activity ,我在其中执行此操作以获取项目位置:

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();
        }
    }

因此,我可以通过单击按钮打开主要 Activity ,并在底部获得 TOAST 文本,从而给出准确的结果。

但我希望在单击时隐藏/禁用应用程序小部件的相应元素。我应该为此做什么?

最佳答案

您必须在按下按钮时从适配器中删除列表项。并打电话

adapter.notifyDataSetChanged();

然后该项目将消失。 希望这能有所帮助。

关于Android 应用小部件 ListView onclick 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24930556/

相关文章:

android - 禁用按钮在触摸时失去按下状态

android - ExpandableListAdapter onClickListener,调用notifyDataSetChanged()

android - 委派经理是一个好的设计理念吗?

android - 如何滚动可滚动的 AccessibilityNodeInfo 节点

android - 我如何知道应用程序在 android 后台运行了多长时间?

android - 在 LinearLayout 中获取 View 的位置 (Android)

android - 将交替的 onClickListener 设置为 Recyclerview 项目

安卓 XML : Centring a view in relative layout- android:layout_centerHorizontal ="true" not working?

java - Android ListView 根据页脚大小将内容包装到一定大小

android - listview setItemChecked 无法正常工作