Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ANDROID:实时修改我的布局_Java_Android_Layout - Fatal编程技术网

Java ANDROID:实时修改我的布局

Java ANDROID:实时修改我的布局,java,android,layout,Java,Android,Layout,我在应用程序上实时更新布局时遇到了一些麻烦 我想显示带有按钮“加载数据”的第一个屏幕。 当我按下按钮时,我想将文本更改为“加载…”,并在应用程序加载数据时显示进度条。完成后,我想再次将文本更改为“启动应用程序”,并使进度条显示disepear 我遇到的问题是,按钮中的文本没有重新生成,progressiv栏也没有显示 我已经尝试了很多东西,有线程和没有线程,在互联网上寻求帮助,但我找不到任何合适的提示 也许你有办法帮我D public void onCreate(Bundle savedInst

我在应用程序上实时更新布局时遇到了一些麻烦

我想显示带有按钮“加载数据”的第一个屏幕。 当我按下按钮时,我想将文本更改为“加载…”,并在应用程序加载数据时显示进度条。完成后,我想再次将文本更改为“启动应用程序”,并使进度条显示disepear

我遇到的问题是,按钮中的文本没有重新生成,progressiv栏也没有显示

我已经尝试了很多东西,有线程和没有线程,在互联网上寻求帮助,但我找不到任何合适的提示

也许你有办法帮我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);
    }
}
试试这个:

 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强大得多。