在非Activity类里面启动Intent、Toast等、非Activity类引用getResources()方法问题的解决方法

本文介绍如何在Android的Adapter中正确启动Intent及显示Toast消息。通过在Activity中声明静态变量并初始化,可在Adapter内部通过该静态变量引用Activity上下文,进而实现启动新的Activity。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时我们在做ListView或ViewPage等控件的应用的时候,往往是要在在这些控件的Adapter里做事件监听的,但是在Adapter类里启动一个Intent是不能直接启动的,所以需要做一下这样的处理:

首先在当前运行的Activity里声明静态对象:

public static MainActivity mactivity;

public static Context mContext;

然后在其onCreate里的添加一句:

mactivity=this;

mContext = this.getBaseContext();

然后这个时候就可以在Adapter类里面调用:

Toast.makeText(MainActivity.mactivity, "点击项", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.mactivity, A.class);
MainActivity.mactivity.startActivity(intent);

这样就可以实现想要的效果了。

非Activity类引用getResources()方法问题用到上面我自己添加的那条context代码。


恢复出厂设置后,吐司提示的实现方法可以通过以下步骤来完成: 1. 在应用程序的 AndroidManifest.xml 文件中,声明一个权限: ```xml <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> ``` 2. 在应用程序中创建一个 Service,并在 onCreate() 方法中创建一个 WindowManager,并使用 WindowManager.LayoutParams 将一个 View 添加到屏幕上,这个 View 就是吐司提示的内容。例如: ```java public class ToastService extends Service { private WindowManager mWindowManager; private View mToastView; private WindowManager.LayoutParams mLayoutParams; @Override public void onCreate() { super.onCreate(); mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); mToastView = LayoutInflater.from(this).inflate(R.layout.toast_view, null); mLayoutParams = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, PixelFormat.TRANSLUCENT); mLayoutParams.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL; mLayoutParams.y = getResources().getDimensionPixelSize(R.dimen.toast_margin_bottom); mWindowManager.addView(mToastView, mLayoutParams); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onDestroy() { super.onDestroy(); if (mWindowManager != null && mToastView != null) { mWindowManager.removeView(mToastView); } } } ``` 3. 在应用程序的启动 Activity启动这个 Service,例如: ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startService(new Intent(this, ToastService.class)); } } ``` 4. 在 AndroidManifest.xml 文件中声明这个 Service,例如: ```xml <service android:name=".ToastService" /> ``` 这样,当恢复出厂设置后,应用程序启动后会显示一个吐司提示。为了避免重复显示,可以在 onCreate() 方法中添加一个判断,判断当前是否已经显示过吐司提示。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值