2011-06-17 7 views
0

私が約40時間を費やした私のプロジェクトはほぼ完了していますが、達成するための最後のタスクが1つあります。私の以前の問題は、ユーザがニュースRSSフィードをプルアップするためにクリックしたときに、その両方が同時にアクティビティとフィードを読み込もうとしたときにアプリケーションがハングすることがあったということです。これはasynctaskで解決されました。Android:onClickビューとAsynctaskを利用する

これとともに、私は4つのボタンがあり、それぞれのフィードを切り替え、本質的にはビューを変更するだけです。これにより、画面または新しいアクティビティの再ロードが不要になります。さて、私が最初にこのアクティビティを起動すると、asynctaskは私が望むのとまったく同じように動作しますが、下部の異なるビューのそれぞれに貼り付けをコピーするほど簡単ではありません。どのようにそれらの異なるボタン/ビューのそれぞれの下にasynctaskを実装するのですか?一番下のonClickが表示されます。

ここにはasynctaskセクションがあります。ここ

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セクションに同じasynctaskタスクを置くことを許可しませんか?私は、モディファイアについてまだ分かりませんが、モディファイアの配置方法はまだ分かりません。まだたくさんのことを学んでいます。

ます。public void onClickの(ビュー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); 

     }  
    } 
+0

なぜ、内部クラスを持つ代わりに、 'RssLoadingTask'というパブリッククラスを使用していますか? –

+0

問題が何であるか、なぜ 'onClick'に' AsyncTask'を置くことができないのか、少し説明してください。 –

+0

@Francesco - 私はかなり初心者です。どうすれば修正できますか? – tjberte

答えて

0

私は質問に私の見解を使用していないことになりました。私は、各ボタンで異なるアクティビティを開くことによって、ビューを切り替えるだけです。

関連する問題