Java ANDROID:实时修改我的布局
我在应用程序上实时更新布局时遇到了一些麻烦 我想显示带有按钮“加载数据”的第一个屏幕。 当我按下按钮时,我想将文本更改为“加载…”,并在应用程序加载数据时显示进度条。完成后,我想再次将文本更改为“启动应用程序”,并使进度条显示disepear 我遇到的问题是,按钮中的文本没有重新生成,progressiv栏也没有显示 我已经尝试了很多东西,有线程和没有线程,在互联网上寻求帮助,但我找不到任何合适的提示 也许你有办法帮我DJava ANDROID:实时修改我的布局,java,android,layout,Java,Android,Layout,我在应用程序上实时更新布局时遇到了一些麻烦 我想显示带有按钮“加载数据”的第一个屏幕。 当我按下按钮时,我想将文本更改为“加载…”,并在应用程序加载数据时显示进度条。完成后,我想再次将文本更改为“启动应用程序”,并使进度条显示disepear 我遇到的问题是,按钮中的文本没有重新生成,progressiv栏也没有显示 我已经尝试了很多东西,有线程和没有线程,在互联网上寻求帮助,但我找不到任何合适的提示 也许你有办法帮我D public void onCreate(Bundle savedInst
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);
}
}
试试这个:
if(buttontext.equals("Load Data")){
..
}
试试这个:
if(buttontext.equals("Load Data")){
..
}
使用以下行阻塞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]
}
}
使用以下行阻塞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]
}
}
这是我的解决方案,如果有一天它能帮助某人: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");
}
这是我的解决方案,如果有一天它能帮助某人: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");
}
对不起,我忘了告诉你我的问题出在哪里了。事实上,文本没有刷新,progressiv栏也没有显示:/我的代码是正确的,但我不知道为什么,对布局的操作无效对不起,我忘记告诉我的问题出在哪里了。事实上,文本不会刷新,progressiv栏也不会显示:/My code是正确的,但我不知道为什么,布局上的操作没有效果,您需要了解-它们旨在帮助您执行后台任务(如appInit方法)您可以在AsyncTask的帮助下做到这一点,例如2016年,仍然使用AsyncTask是令人伤心的。选择RxAndroid,开始有点困难,但之后它会比AsyncTask简单且功能强大得多。您需要了解-它们旨在帮助您执行后台任务(如您的appInit方法)您可以在AsyncTask的帮助下做到这一点,例如2016年,仍然使用AsyncTask是令人伤心的。选择RxAndroid,开始有点困难,但之后它很容易,而且比AsyncTask强大得多。