【问题标题】:how to present a toast when a widget is clicked?单击小部件时如何呈现吐司?
【发布时间】:2012-09-20 11:46:30
【问题描述】:

我需要做一个简单的小部件,当点击它时会显示一个 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?谁做过这个可以向我解释这个问题有什么问题?
  • 我认为有人不喜欢你最初的问题。
  • 好的,谢谢。你帮了我很多。

标签: android widget onclick toast


【解决方案1】:

只需在View.OnClickListener 的小部件的onClick() 方法中调用Toast.makeText(context, "activated", Toast.LENGTH_LONG).show();

更新:

如果您使用AppWidgetProvider,请查看thisthis one 帖子

【讨论】:

  • 扩展 AppWidgetProvider 的类中没有 View.onClickListener。只有 setOnClickPendingIntent。
  • 您应该在问题中写下您想要处理 app_icon 点击​​事件以更清晰。
  • 它不是 app_icon 点击​​,它是一个小部件点击启动器。
  • 我就是这个意思。正确表述您的问题。
  • 我提出了我的问题,谢谢!
【解决方案2】:

我认为您缺少显示创建的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();
            }
        });
    }

}

【讨论】:

  • 谢谢,我在一秒钟前添加了。不是那样的。
  • 如何在扩展 BroadcastReceiver 的类中设置“view.setonclicklistener”。这是不可能的。
  • 我说的是你的自定义 View 类,看我更新的答案
  • 我想它不会阻止我,因为我对 android 有点陌生,但我不明白我如何将“TestButton”与主屏幕上的小部件联系起来?但我想试试。谢谢。
  • TestButton 是一个模范类。目的是向您展示如何在处理自定义视图时覆盖按钮的onClick
【解决方案3】:
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();


  }
}
});

【讨论】:

  • 在扩展 BroadcastReceiver 的类中没有“findviewbyid”。这是不可能的。
  • 如果您使用的是 BroadcastReceiver,则在 Activity 中的按钮单击事件上发送广播消息。并在 onRecive() 方法中吐司。
【解决方案4】:

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

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

【讨论】:

  • 如何在扩展 BroadcastReceiver 的类中设置“view.setonclicklistener”。这是不可能的。
  • 你甚至不能在 AppWidgetProvider 中执行“findViewById”!
  • 再次看到我的问题,它是一个主屏幕小部件!不是常规按钮。你只是不能做 onclicklistener。
【解决方案5】:

试试这个:

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

        }
    }


}

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

【讨论】:

  • 如何在扩展 BroadcastReceiver 的类中设置“view.setonclicklistener”。这是不可能的。
  • 你还在做button.setOnClickListener!!你不能在 AppWidgetProvider 中做到这一点!你们都没有读过cmets :)
  • 我们无法做到这一点。所以,您只需从您的 broadcastReciever 扩展类的 OnRecievemethod 调用您的活动类。您只需在 Activity 类下设计您的 UI。请参阅我的问题已编辑。
【解决方案6】:

伙计们,我的 VS 环境是带有 Xamarin 的 VS 2017。

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

并使用此功能在设备屏幕上显示消息 如下:

DisplayMessage("按下振动按钮");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多