我在应用程序上实时更新布局时遇到了一些麻烦。
我想在第一个屏幕上显示“加载数据”按钮。 当我按下按钮时,我想将文本更改为“正在加载...”并在应用程序加载数据时显示进度条。当它完成后,我想再次将文本更改为“启动应用程序”并使进度条消失。
我遇到的问题是按钮中的文字没有刷新,并且进度条没有显示...
我尝试过很多东西,无论有没有线程,都在互联网上寻求帮助,但我找不到合适的提示。
也许你有想法帮助我? :d
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(this);
button.setText("Load Data");
findViewById(R.id.progressBar).setVisibility(View.INVISIBLE);
}
private void appInit() {
try {
((MyApp) getApplication()).getDataFromServer();
} catch (InterruptedException e) {
e.printStackTrace();
}
((MyApp) getApplication()).initData();
}
@Override
public void onClick(final View v) {
Button b = (Button)v;
String buttonText = b.getText().toString();
if(buttonText=="Load Data"){
findViewById(R.id.progressBar).setVisibility(View.VISIBLE);
button.setText("Loading");
appInit();
while(!((MyApp)this.getApplication()).isInitSucceded()){}
button.setText("Launch App");
findViewById(R.id.progressBar).setVisibility(View.INVISIBLE);
findViewById(R.id.button).setVisibility(View.VISIBLE);
}
else {
Intent intent = new Intent(MainActivity.this, ddcorp.test.Resume.class);
startActivity(intent);
}
}
答案 0 :(得分:0)
试试这个:
if(buttontext.equals("Load Data")){
..
}
答案 1 :(得分:0)
使用以下行阻止UI线程不是一个好主意:
while(!((MyApp)this.getApplication()).isInitSucceded()){}
或者您可以使用AsyncTask,它具有后台进程,进度更新和后执行逻辑的方法。这是一个例子:
public class MyTask extends AsyncTask<Void,Integer,String>
{
@override
public String doInBackground(Void... params)
{
//do your background processes
...
publishProgress(someInteger); //for updating progress bar
...
return result;
}
@override
public void onProgressUpdate(Integer... params)
{
//do your progress bar update with params[0]
}
@override
public void onPostExecute(String.. params)
{
//do something with the results of doInBackground stored in params[0]
}
}
以下是如何调用它:
(new MyTask()).execute();
答案 2 :(得分:0)
这是我的解决方案,如果它有一天可以帮助某人:D
Button button;
ProgressBar progress;
private Context mContext;
MyApp mApplication;
public Init(Context context){
mContext = context;
mApplication = (MyApp) mContext.getApplicationContext();
}
@Override
protected void onPreExecute() {
ProgressBar progress=(ProgressBar)((Activity)mContext).findViewById(R.id.progressBar);
progress.setVisibility(View.VISIBLE);
button=(Button)((Activity)mContext).findViewById(R.id.button);
button.setText("Loading");
button.setBackgroundColor(mContext.getResources().getColor(R.color.lgreen));
}
@Override
public Void doInBackground(Void... params) {
try {
mApplication.getDataFromServer();
mApplication.initData();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
super.onPostExecute(result);
ProgressBar progress=(ProgressBar)((Activity)mContext).findViewById(R.id.progressBar);
progress.setVisibility(View.INVISIBLE);
button=(Button)((Activity)mContext).findViewById(R.id.button);
button.setText("Launch");
button.setBackgroundColor(mContext.getResources().getColor(R.color.green));
System.out.println("ok");
}