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); --------------------编程问答-------------------- 这里我注意到了,但是我的问题是我的progressbar找到了控件,下面的setVisibility()报空指针!我是在自己的util工具类中操作Activity的handler来改变ui。 --------------------编程问答-------------------- 晕, 看错了,上面写的不对 --------------------编程问答-------------------- (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