列表活动中的进度条

时间:2011-05-03 15:39:33

标签: android

请帮助我如何将进度条放在以下代码中。这段代码基本上是从服务器获取列表所以我想在服务器进度条出现列表之前我想要的等待时间bcz需要一些时间从服务器获取列表

这是代码

 public class Test extends ListActivity  {
          Prefs myprefs = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.listplaceholder);
            this.myprefs = new Prefs(getApplicationContext());
            ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

            JSONObject json = JSONfunctions.getJSONfromURL("http://midsweden.gofreeserve.com/fetch.php?id=" + 
                    Test.this.myprefs.getEmail());

            try{

                JSONArray  earthquakes = json.getJSONArray("earthquakes");

                for(int i=0;i<earthquakes.length();i++){                        
                    HashMap<String, String> map = new HashMap<String, String>();    
                    JSONObject e = earthquakes.getJSONObject(i);

                    map.put("id",  String.valueOf(i));
                    map.put("name", "Earthquake name:" + e.getString("name"));
                    map.put("password", "Magnitude: " +  e.getString("password"));
                    mylist.add(map);            
                }       
            }catch(JSONException e)        {
                 Log.e("log_tag", "Error parsing data "+e.toString());
            }

            ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.test, 
                            new String[] { "name", "magnitude" }, 
                            new int[] { R.id.item_title, R.id.item_subtitle });

            setListAdapter(adapter);

            final ListView lv = getListView();
            lv.setTextFilterEnabled(true);  
            lv.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
                    @SuppressWarnings("unchecked")
                    HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   
                    Toast.makeText(Test.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show(); 

                }
            });
        }



        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.menu, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.settings:     
                    Intent intent = new Intent(this, ShowSettings.class);
                      startActivity(intent);
                break;
                case R.id.services:     
                    Intent intent2 = new Intent(this, Test.class);
                    startActivity(intent2);
                  break;
                case R.id.Quit: 

                    finish();



                    break;
                default:    
                break;
            }
            return true;
        }
    }

1 个答案:

答案 0 :(得分:0)

始终避免对邮件Ui thread进行长时间运行。进行长时间运行操作的最佳方法之一是 - 使用AsynTask进行长时间运行(例如,从服务器请求数据以及从互联网等下载内容)。请阅读AsyncTask, 你可以这样做_

public class Test extends ListActivity  {
    Prefs myprefs = null;


  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.listplaceholder);
      this.myprefs = new Prefs(getApplicationContext());
      ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
      final ListView lv = getListView();
      setListAdapter(adapter);

      //Execute long running operation.
      new GetListDataAndShowProgress().execute();

      lv.setTextFilterEnabled(true);  
      lv.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
              @SuppressWarnings("unchecked")
              HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   
              Toast.makeText(Test.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show(); 

          }
      });
  }

  //Your all other code.....

}

这是从您的服务器加载数据的类。

class GetListDataAndShowProgress extends AsyncTask<Void, Void, String>{

    ProgressDialog loadingDialog;
    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        loadingDialog = new ProgressDialog(Test.this);
        loadingDialog.setTitle("Fetching Data!");
        loadingDialog.setMessage("Please wait ...");
        loadingDialog.setIndeterminate(true);
        loadingDialog.setCancelable(false);
        loadingDialog.show();

    }
    @Override
    protected String doInBackground(Void... params) {
        // TODO Auto-generated method stub
        //Your code that fetch data from server and add into your ArrayList

        return "Success to  get List data!";
    }
    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        adapter.notifyDataSetChanged();
        loadingDialog.dismiss();
        Toast.makeText(Test.this, result, Toast.LENGTH_LONG).show();
    }

}

我希望这会对你有所帮助。