当前位置:编程学习 > wap >>

android怎么在外部类中操作button的方法

请帮忙看看下面程序,问题已标出:求怎么在外部类中操作button的方法/。
 import android.app.Activity;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnTouchListener;
 import android.widget.Button;
 
public class ButtonListener1  implements OnClickListener{  
         private Button mButton;
         //重写并传递button,
         public ButtonListener1(Button mButton){
                 super();
                 this.mButton=mButton;                        
        }
 
    public void onClick(View v) {  
      if(v.getId() == R.id.mButton){  
          Log.d("test", "cansal button ---> click"); 
         System.out.println("cansal button ---> click");     
   //     mButton = (Button)findViewById(R.id.mButton);//问题1:编辑这句有错误,不识别findViewById
    //    mButton.setBackgroundResource(R.drawable.green);//问题2:执行这句提示空指针错误
              }  
          }   
 }  --------------------编程问答-------------------- 同问啊,现在也遇到类似的了。。。 --------------------编程问答-------------------- (Button)ButtonListener1.this.findViewById(R.id.mButton); --------------------编程问答--------------------
引用 2 楼  的回复:
(Button)ButtonListener1.this.findViewById(R.id.mButton);
这里我注意到了,但是我的问题是我的progressbar找到了控件,下面的setVisibility()报空指针!我是在自己的util工具类中操作Activity的handler来改变ui。 --------------------编程问答-------------------- 晕, 看错了,上面写的不对 --------------------编程问答--------------------
引用 4 楼  的回复:
晕, 看错了,上面写的不对
(Button)getCurrentActivity().findViewById(R.id.mButton);
这样写是对的。但是我是在util中操作handler来实现activity界面更新。我贴代码吧:


public ProgressBar[] pro = new ProgressBar[5];
public ProgressBar progressbar;
public int[] progress = { R.id.mapp_app189_progressBar,
R.id.mapp_appWifi_progressBar, R.id.mapp_hbzs_progressBar,
R.id.mapp_tycloud_progressBar, R.id.mapp_ysync_progressBar };

public DownloadFile(Context context, Activity activity) {
this.context = context;
this.activity = activity;
}

public Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {

int i = (Integer) msg.obj;
Log.d("msg", "msg:" + i);
switch (msg.what) {
case 0:
pro[i] = (ProgressBar) activity.findViewById(progress[i]);
pro[i].setVisibility(View.VISIBLE);
pro[i].setProgress(0);
pro[i].invalidate();
break;
case 2:
pro[i].invalidate();
Toast.makeText(context, "网络连接失败,请检查您的网络设置", Toast.LENGTH_SHORT)
.show();
break;
case 3:
pro[i].invalidate();
Toast.makeText(context, "sd卡未找到,请检查您的sd卡是否插入",
Toast.LENGTH_SHORT).show();
break;
case 4:
pro[i].setVisibility(View.GONE);
break;
default:
break;
}
super.handleMessage(msg);
}

}; --------------------编程问答-------------------- activity界面更新,这些都是在主线程里才能操作的
补充:移动开发 ,  Android
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,