Android: onClick Between Views и использование Asynctask - PullRequest
0 голосов
/ 17 июня 2011

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

Теперь, кроме этого, у меня есть четыре кнопки, которые переключаются между различными каналами и, по сути, просто изменяют вид.Это исключает перезагрузку экрана или новые действия.Что ж, когда я изначально запускаю это действие, asynctask работает точно так, как я хочу, но это не так просто, как копирование вставки в каждое из представлений внизу.Как мне реализовать asynctask под каждой из этих разных кнопок / видов.Вы увидите onClick внизу.

Вот раздел асинхронной задачи.

public class RssLoadingTask extends AsyncTask<Void, Void, Void> {

         @Override
         protected void onPostExecute(Void result) {
          // TODO Auto-generated method stub
          displayRss();
         }

         @Override
         protected void onPreExecute() {
          // TODO Auto-generated method stub
          preReadRss();
         }

         @Override
         protected void onProgressUpdate(Void... values) {
          // TODO Auto-generated method stub
          //super.onProgressUpdate(values);
         }

         @Override
         protected Void doInBackground(Void... arg0) {
          // TODO Auto-generated method stub
          readRss();
          return null;
         }

        }

А ниже здесь раздел onClick.Очевидно, что с учетом вышесказанного каждый readRss, preReadRSS и т. Д. Находится в нужных местах в начальном упражнении, но почему Java не позволяет мне размещать эти же асинхронные задачи в разделе onClick?Я просто не знаю достаточно о модификаторах, чтобы знать, как их разместить.Все еще многому учусь.

public void onClick (View v) {

if (v == hawknation) {


    try {

          URL rssUrl = new URL("http://www.rss.com/feed");
          SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
          SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
          XMLReader myXMLReader = mySAXParser.getXMLReader();
          RSSHandler myRSSHandler = new RSSHandler();
          myXMLReader.setContentHandler(myRSSHandler);
          InputSource myInputSource = new InputSource(rssUrl.openStream());
          myXMLReader.parse(myInputSource);

          myRssFeed = myRSSHandler.getFeed();

         } catch (MalformedURLException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         } catch (ParserConfigurationException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         } catch (SAXException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         }}


   {

         if (myRssFeed!=null)
         {
          TextView feedTitle = (TextView)findViewById(R.id.feedtitle);
          TextView feedDescribtion = (TextView)findViewById(R.id.feeddescribtion);
          TextView feedPubdate = (TextView)findViewById(R.id.feedpubDate);
          TextView feedLink = (TextView)findViewById(R.id.feedlink);
          feedTitle.setText(myRssFeed.getTitle());
          feedDescribtion.setText(myRssFeed.getDescription());
          feedPubdate.setText(myRssFeed.getPubdate());
          feedLink.setText(myRssFeed.getLink());

          MyCustomAdapter adapter =
           new MyCustomAdapter(this, R.layout.row, myRssFeed.getList());
          setListAdapter(adapter);

         }       
     }

1 Ответ

0 голосов
/ 26 июня 2011

В итоге я не использовал свое мнение.Я просто переключаюсь между представлениями, открывая разные действия для каждой кнопки.

...