2016-11-08 113 views
0

我有一些问题。 在主要活动中,我创建按钮加载活动时的进度条

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); 
       } 
      } 


     } 
    } 

但是,正如在一个多字的数组中,在屏幕“冻结”时。在这种衰落时如何制作标准的进度条?了解应用程序工作的用户。

回答

1

使用AsyncTask。

https://developer.android.com/reference/android/os/AsyncTask.html

你将极有可能重新安排你的代码了一下,但如果你的for循环是长时间运行的是什么是“冻结”你的应用程序。 AsyncTask有3种方法来完成这个任务。在onPreExecute显示你的进度条。然后在doInBackground()中,您将需要执行for循环逻辑。在onPostExecute()中,您可以将您创建的所有按钮添加到视图中。在UI线程中执行前/后执行方法时,您只能修改UI,而在UI线程中执行doInBackground并且在尝试修改UI时会抛出异常。

+0

非常有趣,并可以设置使用onPostExecute()和doInBackground()的例子吗? –

+0

这是一个简单但很好的例子; http://www.journaldev.com/9708/android-asynctask-example-tutorial – RoLAN210

+0

tnx!很合拍 –