ANDROID:实时修改我的布局

时间:2016-05-12 22:22:30

标签: java android layout

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

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

我遇到的问题是按钮中的文字没有刷新,并且进度条没有显示...

我尝试过很多东西,无论有没有线程,都在互联网上寻求帮助,但我找不到合适的提示。

也许你有想法帮助我? :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);
    }
}

3 个答案:

答案 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");
}