当小部件被点击时如何呈现一个提示?

3

我需要制作一个简单的小部件,当点击它时会弹出Toast消息。 我的问题是我找不到如何获取或创建"oncreate"操作。我看到了一些示例使用待定意图打开Web浏览器。但是我该如何简单地创建这个:Toast.makeText(context, "activated", Toast.LENGTH_LONG).show();并且让它在用户每次点击小部件时发生呢? 只是为了明确,我指的是手机启动器上的小部件。不是常规的“按钮”小部件等...

public class Widget extends AppWidgetProvider {
NotificationManager mNotificationManager;
Notification notification;

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



    appWidgetManager.updateAppWidget(appWidgetIds, view);
}

谢谢!


1
为什么是-1?谁曾经做过这个可以解释一下问题出在哪里吗? - roiberg
1
我觉得有人不喜欢你最初的问题。 - teoREtik
6个回答

4

在小部件的onClick()方法中调用Toast.makeText(context, "activated", Toast.LENGTH_LONG).show();即可。

更新:

如果您使用AppWidgetProvider,请检查此贴这篇帖子。


1
在扩展AppWidgetProvider的类中没有View.onClickListener,只有setOnClickPendingIntent。 - roiberg
1
你应该在问题中写明你想处理app图标点击事件以获得更清晰的说明。 - teoREtik
不是应用图标点击,而是小部件在启动器上的点击。 - roiberg
我只是想说,正确地表达你的问题。 - teoREtik
我已经提出了我的问题,谢谢! - roiberg
下次不要忘记在你的问题中使用关键类名以获得更清晰的表述。 - teoREtik

1

我认为您忘记了显示创建的Toast。例如:

Toast.makeText(context, "activated", Toast.LENGTH_LONG).show();

此外,覆盖您自定义的View类的onClick方法并在那里弹出toast。
public class TestButton extends Button {

    public TestButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void setOnClickListener(OnClickListener l) {
        super.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(), "activated", Toast.LENGTH_LONG)
                  .show();
            }
        });
    }

}

谢谢,我刚刚添加了那个。但那不是问题所在。 - roiberg
1
如何在扩展BroadcastReceiver的类中设置“view.setonclicklistener”?这是不可能的。 - roiberg
我在谈论你的自定义视图类,请查看我的更新答案。 - waqaslam
我猜这对我没有帮助,因为我对Android新手,但我不知道如何将“TestButton”与主屏幕上的小部件相关联? 但我会尝试一下。谢谢。 - roiberg
那个TestButton是一个典型的类。它的目的是向您展示在处理自定义视图时如何覆盖按钮的onClick方法。 - waqaslam

0

各位,我的VS环境是带有Xamarin的VS 2017。

   private void DisplayMessage(string DisplayMsgText)
    {
        Toast.MakeText(this.ApplicationContext, DisplayMsgText, ToastLength.Short).Show();
    }

使用此函数在设备屏幕上显示消息,如下所示:

DisplayMessage("震动按钮已按下");


0
Button btn=(Button) findViewById(R.id.button);

            btn.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
                   Toast.makeText(context, "activated", Toast.LENGTH_LONG).show();


  }
}
});

1
在扩展BroadcastReceiver的类中没有“findviewbyid”,这是不可能的。 - roiberg
如果你正在使用BroadcastReceiver,那么在Activity的按钮点击事件中发送广播消息。并在onReceive()方法中弹出toast提示信息。 - user1554037

0

试试这个:

button = (Button) findViewById(R.id.buttonToast);

        button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

        // Create a piece of toast.
        Toast pieceToast = Toast.makeText(getApplicationContext(), "Test Message", Toast.LENGTH_SHORT);

        // Show the toast.
        pieceToast.show();
    }

这是我的BroadcastReciever类:

public class IncomingCallReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        if(null == bundle)
            return;
        Log.i("IncomingCallReceiver",bundle.toString());
        String state = bundle.getString(TelephonyManager.EXTRA_STATE);
        String registredPhoneNumber;
        Log.i("IncomingCallReceiver","State: "+ state);
        String phonenumber = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
        System.out.println("*****Mobile Ringing*******"+phonenumber);
        if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
        {
            registredPhoneNumber = PreferenceConnector.getPhoneNumber(context);
            System.out.println("registredPhoneNumber:  "+registredPhoneNumber);
            System.out.println("phonenumber:   "+phonenumber);
            Log.i("IncomingCallReceiver","Incomng Number: " + phonenumber);
            if(phonenumber.equals(registredPhoneNumber)){
                System.out.println("Entered...");
                String info = "Detect Calls sample application\nIncoming number: " + phonenumber;
                if(isMyServiceRunning(context)){
                    context.stopService(new Intent(context,com.visiomaticamericas.visitormobile.services.LaunchServiceActivity.class));
                    System.out.println("******Service Stopped*********");
                }
                Intent i = new Intent(context,com.services.LaunchServiceActivity.class);
                i.putExtra("delay",500L);
                context.startService(i);
                System.out.println("*****Service Started*****");
                Toast.makeText(context, info, Toast.LENGTH_LONG).show();
            }

        }
    }


}

这里,我调用了我的活动类,并在我的活动类中进行了小部件设计。


1
如何在扩展BroadcastReceiver的类中设置“view.setonclicklistener”?这是不可能的。 - roiberg
你仍在使用button.setOnClickListener!! 你不能在AppWidgetProvider中这样做!你们都没有读评论 :) - roiberg
我们无法做到这一点。因此,您只需从BroadcastReceiver扩展类的OnReceive方法中调用您的Activity类即可。您只需在Activity类下设计UI即可。请参见我的问题编辑。 - user1357696

0

这可能会有所帮助,这里需要通过您的小部件传递上下文并获取Onclick事件

Toast.makeText(context, "已激活", Toast.LENGTH_LONG).show();


1
如何在扩展BroadcastReceiver的类中设置“view.setonclicklistener”?这是不可能的。 - roiberg
在 AppWidgetProvider 中甚至无法执行“findViewById”! - roiberg
请再看我的问题,这是一个主屏幕小部件!不是普通按钮。你不能使用onclicklistener。 - roiberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接