gpt4 book ai didi

java - findViewById(R.id.progressbar) 和静态 hell :

转载 作者:行者123 更新时间:2023-12-02 00:35:42 24 4
gpt4 key购买 nike

clipProgress 将进度条重置为零:

public class Whatever extends Activity implements ListenerA, ListenerB {
private Handler mHandler = new Handler();

ProgressBar myProgressBar;
int myProgress = 0;

public void clipProgress() {
myProgressBar = (ProgressBar)findViewById(R.id.progressbar);
myProgressBar.setProgress(myProgress);
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

clipProgress();

public void onClick(View view) {
Duration.duration = 0;
startRecording();

new Thread(new Runnable(){
@Override
public void run() {
while(myProgress<100){
try{
myHandle.sendMessage(myHandle.obtainMessage());
Thread.sleep(50);
}catch(Throwable t){
}
}
}
}).start();
}

Handler myHandle = new Handler(){
@Override
public void handleMessage(Message msg) {
myProgress++;
myProgressBar.setProgress(myProgress);
}
};
});
}
<小时/>

我有两种不同的方法,如下所示,我想我可以尝试将进度条重置为零。但它们完全属于不同的类:

@Override   protected void onPostExecute(Void result) {  
Whatever.clipProgress(); //...which throws all kinds of red lines if I use this statement.
}

public void stopThis(){
thing.stop();
try {
Whatever.clipProgress(); //...which throws all kinds of red lines if I use this statement.

dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

Eclipse 希望将“静态”应用于Whatever 类中的各种初始化。但这些修复只是将 findViewById(R.id.progressbar) 标记为红线。

我只是想从第 2 类重置进度条(从第 1 类开始)。要求太多了。

更新:无论起始点是什么,Android Activity 都是如此。它的处理程序,我应该包含在上面的 fragment 中,位于 onCreate 的正下方,包含在下面的 fragment 中。因此,更完整地,从按钮调用,是这样的:

        public void onClick(View view) {
new Thread(new Runnable(){
@Override
public void run() {
while(myProgress<100){
try{
myHandle.sendMessage(myHandle.obtainMessage());
Thread.sleep(87);
}catch(Throwable t){
}
}
}
}).start();
}

Handler myHandle = new Handler(){
@Override
public void handleMessage(Message msg) {
myProgress++;
myProgressBar.setProgress(myProgress);
}
};

一旦按下该按钮,就会生成一个监听器:

    myTask = new Task();
myTask.addTaskListener(this);
myTask.execute(this);

它位于 Task 类内部:

public class Task extends AsyncTask<Whatever, ArrayList<Float>, Void>{
...
public void addTaskListener(TaskListener rl){
this.rl = rl;
}
...

这两个函数驻留,我希望用其中之一来停止进度条。

任务在其他地方被设计为在恒定的秒数处关闭,因此我可以将 50 硬编码到 sleep() 的进度条值中。我只是希望如果我早点停止任务,能够早点将进度条关闭回零。

最佳答案

Eclipse 会向您发出警告,因为您正在以静态方式访问 clipProgress 方法(通过调用 Whatever.clipProgress())。

此外,您应该只分配一次进度条,因此请移动

myProgressBar = (ProgressBar)findViewById(R.id.progressbar);

进入您的onCreate方法。

您可能应该将 ProgressBar 传递到需要更新它的其他类中,然后执行类似的操作

myProgressBar.post(new Runnable() {
public void run() {
myProgressBar.setProgress(myProgress);
}
});

post 方法更新 UI 线程上的 ProgressBar,这是唯一安全的方法。确保仅当带有 ProgressBar 的 Activity 当前处于 Activity 状态时才执行此操作。

您还应该询问是否需要更新其他类中的进度条。我只看到您更新了处理程序中的 myProgress 变量,然后您立即在栏上设置了进度。您能否更多地解释一下其他类与带有进度条的 Activity 之间的关系?

关于java - findViewById(R.id.progressbar) 和静态 hell :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com