外部类调用findViewById

山河君 2020-12-25 05:40:02
安卓新手,我想在外部类(用于响应按钮控件)中调用findViewById接口找到控件,结果发现不行
import android.widget.EditText;
import android.widget.Spinner;

public class BTListerner extends Activity implements View.OnClickListener {
public void onClick(View view)
{
EditText edtText;
switch (view.getId())
{
case R.id.btn_delDev:
edtText = findViewById(R.id.edt_devScan);
edtText.setText("");
break;
case R.id.btn_delKnife:
edtText = findViewById(R.id.edt_KnifeScan);
edtText.setText("");
}
...全文
12174 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
toorup 2020-12-29
  • 打赏
  • 举报
回复
引用 5 楼 朕守山河的回复:
[quote=引用 3 楼 toorup 的回复:]外部类加个参数context,调用时把activity一起传过来
如何将activity穿过去啊,我加了context,但是只是用于获取上下文,拿到资源文件而已,还是找不到控件[/quote] 搞错了,我记错了,是用到Toast时这样用过
山河君 2020-12-29
  • 打赏
  • 举报
回复
引用 3 楼 toorup 的回复:
外部类加个参数context,调用时把activity一起传过来
如何将activity穿过去啊,我加了context,但是只是用于获取上下文,拿到资源文件而已,还是找不到控件
toorup 2020-12-29
  • 打赏
  • 举报
回复
外部类加个参数context,调用时把activity一起传过来
山河君 2020-12-29
  • 打赏
  • 举报
回复
为啥结帖不能单独给积分了
山河君 2020-12-29
  • 打赏
  • 举报
回复
引用 9 楼 汤姆.刻录盘 的回复:
新手的话,推荐用EventBus,查下百度吧。。。
这个已经解决了,我只是抱着学习的心态想了解一下能不能直接调用的,毕竟使用handler需要配合message一起使用,觉得有点麻烦
比特灵 初级 2020-12-29
  • 打赏
  • 举报
回复
新手的话,推荐用EventBus,查下百度吧。。。
比特灵 初级 2020-12-29
  • 打赏
  • 举报
回复
回调实例: public MyClass{ interface IResponse{ void callback(int type); } public MyClass(IResponse r){ this.resp = r; } private IResponse resp; public void xxxxx(){ if(this.resp != null) this.resp.callback(1); } } 在MainActivity中定义: private MyClass myc; 在onCreate或其它任意方法,必须在使用之前实例它: myc = new MyClass(new MyClass.IResponse(){ public void callback(int){ runOnUiThread(){ .... } } });
比特灵 初级 2020-12-29
  • 打赏
  • 举报
回复
还没解决吗? 查任意一个关键字,学习一下就行了的事情,例如用handler给你个最简单的代码,讲究点的用弱引用,这里就直接用吧: 1,定义一个Handler类,例如:

    public class MainHandler extends Handler {
        private MainActivity activity;//你自己的ACTIVITY类

        public MainHandler(MainActivity act) {
            if (act == null) return;
            this.activity = act;
        }

        @Override
        public void handleMessage(@NonNull Message msg) {
           if(this.activity  == null) return;
           if(msg.what==1){
                this.activity.edtText.setText("测试测试");
           }
        }
    }
2,在MainActivity中声明并实例化这个handler(类属性,或在onCreate中实例化它): private MainHandler mainHandler = new MainHandler(this); 3,传递mainHandler给任意外部类 例如MyClass定义: public class MyClass{ private MainHandler handler ; public MyClass(MainHandler hd){ this.handler = hd; } } 在MainActivity中作为实例化参数传给它: MyClass xxx = new MyClass(mainHandler); 4,在外部类中,调用handler发送消息 mainHandler.obtainMessage(1, null).sendToTarget();
比特灵 初级 2020-12-25
  • 打赏
  • 举报
回复
我说的是达到你的目的哦,不是外部调用findViewById
比特灵 初级 2020-12-25
  • 打赏
  • 举报
回复
有几种办法,例如回调、内部类直接引用、传入handler、还有新手最容易用的EventBus。

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧