Проблема с макетом Android и индикатором выполнения - PullRequest
0 голосов
/ 04 мая 2011

Я все еще работаю над своим приложением, которое должно хранить данные RSS локально. До сих пор мне удалось создать локальную базу данных и разобрать онлайн-канал RSS. Мне также удалось поместить эту информацию в базу данных, так что теперь приложение будет доступно и в автономном режиме.

Однако я не могу понять, как сделать следующее: У меня есть 2 кнопки, одна из которых читает заголовки базы данных и перейдет на подробную страницу вашего выбора (все еще работает над этим)

Моя текущая проблема заключается в том, что я не могу добавить полосу загрузки, которая появляется на экране, пока приложение загружает данные из Интернета. Экран просто пуст в течение примерно 10 секунд, а затем появляется список. вот код, который я использую:

открытый класс SynchDB_Activity расширяет ListActivity {

public List<Message> messages;
public List<String> titles;
//ProgressDialog dialog = ProgressDialog.show(SynchDB_Activity.this, "", "Downloading data...", true);

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.animal_list_view);

    loadFeed();
}

private void loadFeed(){

    try{
        BaseFeedParser parser = new BaseFeedParser();
        messages = parser.parse();

        List<String> titles = new ArrayList<String>(messages.size());

        DBAdapter db = new DBAdapter(this);

        for (Message msg : messages){
            titles.add(msg.getTitle());
            db.addRow(  
                msg.getTitle(), 
                msg.getDescription(), 
                "bla", 
                "http:/", 
                msg.getLink());
        }

        //dialog.dismiss();

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.row,titles);
        this.setListAdapter(adapter);

    } catch (Throwable t){
        Log.e("AndroidNews",t.getMessage(),t);
    }
}

Таким образом, этот код работает и помещает все данные в локальную базу данных. Однако я просто не могу заставить этот загрузочный бар работать, и это сводит меня с ума.

Если бы кто-нибудь мог мне помочь, я был бы благодарен !!! Я весь день гуглил, и, похоже, ничего не помогло ...

большое спасибо

edit: Как вы видите в коде, я отображаю список, когда все готово. Это не обязательно, но с того момента, как я удалю ArrayAdapter, приложение больше не будет работать.

Имейте в виду, что все это довольно ново для меня, и я думаю, что основная часть, где все идет не так, - это использование разных макетов ...

Ответы [ 2 ]

0 голосов
/ 04 мая 2011

Используйте асинхронную задачу и индикатор выполнения, как показано здесь:

public void  getrss()
{
     try{
        class test extends AsyncTask{


             TextView tv_per;
             int mprogress;

            Dialog UpdateDialog = new Dialog(ClassContext);

            @Override
            protected void onPreExecute() {
                // TODO Auto-generated method stub
                mprogress = 0;

                UpdateDialog.setTitle(getResources().getString(R.string.app_name));
                UpdateDialog.setContentView(R.layout.horizontalprogressdialog);
                TextView dialog_message =  (TextView)UpdateDialog.findViewById(R.id.titleTvLeft);
                tv_per = (TextView)UpdateDialog.findViewById(R.id.hpd_tv_percentage);
                dialog_message.setText(getResources().getString(R.string.dialog_retrieving_data));
                dialog_message.setGravity(Gravity.RIGHT);
                UpdateDialog.setCancelable(false);
                UpdateDialog.show();
                super.onPreExecute();
            }



            @Override
            protected void onProgressUpdate(Object... values) {
                // TODO Auto-generated method stub
                ProgressBar update = (ProgressBar)UpdateDialog.findViewById(R.id.horizontalProgressBar);
                update.setProgress((Integer) values[0]);
                int percent =  (Integer) values[0];
                if(percent>=100)
                {
                    percent=100;
                }
                tv_per = (TextView)UpdateDialog.findViewById(R.id.hpd_tv_percentage);
                 tv_per.setText(""+percent);
            }



            @Override
            protected Object doInBackground(Object... params) {
                // TODO Auto-generated method stub
                //your code
}

                super.onPostExecute(result);
                UpdateDialog.dismiss();
            }

         }
         new test().execute(null);

     }
     catch(Exception e)
     {
         e.printStackTrace();
     }

}
0 голосов
/ 04 мая 2011

Вы, вероятно, хотите использовать AsyncTask .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...