如何在Android小部件中动态添加按钮

问题描述 投票:0回答:1

我正在用Java开发android应用程序,我必须在小部件中制作一些按钮,这些按钮是动态添加的。我从中尝试了许多解决方案,但是它们不起作用,因此请不要将此问题标记为重复。这是我的Widget.java

package com.fxteam.malcome;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
import android.widget.Button;

import android.view.View;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

import android.util.Log;

public class Widget extends AppWidgetProvider {

    private static final String SYNC_CLICKED    = "malcome_widget_button";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {


        for (int appWidgetId : appWidgetIds) {
            Intent intent2 = new Intent(context, MainActivity.class);
            intent2.putExtra("accountID", "0");
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent2, 0);
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.simple_app_widget); 
            views.setOnClickPendingIntent(R.id.malcome_widget_button, pendingIntent);
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }



        /*Button myButton = new Button(context);
        myButton.setText("Push Me");

        LinearLayout ll = (LinearLayout) findViewById(R.id.widget_layout); //<- this give me error "cannot find symbol method findViewById(int)"
        LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        ll.addView(myButton, lp);*/
    }
}
java android android-widget
1个回答
0
投票

您可以使用:

private Button button;
private LinearLayout linearLayout;

private final int USERID = 6000;
private int countID;

button = (Button) findViewById(R.id.button);
    linearLayout = (LinearLayout) findViewById(R.id.linearLayout);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Button b = new Button(getApplicationContext());
            b.setText("text on btn " + Integer.toString(countID + 1));
            b.setLayoutParams(
                    new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.MATCH_PARENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT)
            );
            b.setId(USERID + countID);
            b.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // to do
                }
            });
            linearLayout.addView(b);
            countID++;
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.