加载活动时的进度条
问题描述:
我有一些问题。 在主要活动中,我创建按钮加载活动时的进度条
Button button=new Button(this);
button.setId(i);
button.setWidth(20);
button.setBackgroundColor(Color.TRANSPARENT);
button.setLayoutParams(params);
button.setText(nazv);
button.setTextSize(22);
button.setTextColor(0xFF2C85A6);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent is = new Intent(getApplicationContext(), termin.class);
is.putExtra("LetVariable", nazv);
startActivity(is);
}
});
LetVariable - 是词的第一个字母。它在Activiti 的终端中传输,在这里可以选择这个字母的数据集。
public class termin extends AppCompatActivity {
String[] mArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.termin);
getSupportActionBar().hide();
Intent mIntent = getIntent();
String LetValue = mIntent.getStringExtra("LetVariable");
int length =0;
length =getResources().getStringArray(R.array.terms).length;
mArray = getResources().getStringArray(R.array.terms);
final LinearLayout linearLayout=(LinearLayout)findViewById(R.id.buttonlayout);
TextView opisTextView = (TextView)findViewById(R.id.TermTextView);
opisTextView.setText("Terms starting with "+LetValue);
for(int i=0;i<length;i++){
//
final String nazv = mArray[i];
final String[] splittedItem = nazv.split("::");
final String fLet=Character.toString(splittedItem[0].charAt(0));
if(fLet.equals(LetValue))
{
Button button=new Button(this);
button.setId(i);
button.setText(splittedItem[0]);
button.setBackgroundColor(Color.TRANSPARENT);
button.setTextSize(19);
button.setGravity(Gravity.LEFT);
button.setTextColor(0xFF2C85A6);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent is = new Intent(getApplicationContext(), termin_full.class);
is.putExtra("fVariableName", nazv);
startActivity(is);
}
});
linearLayout.addView(button);
}
}
}
}
但是,正如在一个多字的数组中,在屏幕“冻结”时。在这种衰落时如何制作标准的进度条?了解应用程序工作的用户。
答
使用AsyncTask。
https://developer.android.com/reference/android/os/AsyncTask.html
你将极有可能重新安排你的代码了一下,但如果你的for循环是长时间运行的是什么是“冻结”你的应用程序。 AsyncTask有3种方法来完成这个任务。在onPreExecute显示你的进度条。然后在doInBackground()中,您将需要执行for循环逻辑。在onPostExecute()中,您可以将您创建的所有按钮添加到视图中。在UI线程中执行前/后执行方法时,您只能修改UI,而在UI线程中执行doInBackground并且在尝试修改UI时会抛出异常。
非常有趣,并可以设置使用onPostExecute()和doInBackground()的例子吗? –
这是一个简单但很好的例子; http://www.journaldev.com/9708/android-asynctask-example-tutorial – RoLAN210
tnx!很合拍 –