2012-06-29 66 views
0

我正在創建一個應用程序,該應用程序在單擊按鈕時應顯示RSS源。鏈接到新頁面的按鈕不起作用

我有一個主類,屏幕1和屏幕2 和一個主要的xml文件和屏幕1和屏幕2的佈局。

現在我與主要XML和類是RSS源之前試過它工作得很好

然而,現在,當我試圖讓屏幕1(屏幕截圖1),其中顯示飼料的地方,我只是得到一個黑色屏幕。

我想知道爲什麼會發生這種情況,正如我通過Screen1類告訴鏈接到screen1 xml文件一樣。

主類:

import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 

import android.widget.Button; 


public class SImpleRssReader2Activity extends Activity { 





@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     Button videoNext = (Button) findViewById(R.id.videoButton) ; 
     videoNext.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       setContentView(R.layout.screen2); 



       // Intent i = new Intent(); 
       // i.setClassName("rahul.application.WunApp", "rahul.application.WunApp.screen1"); 
       // startActivity(i); 
      } 
     }); 

     Button newsNext = (Button) findViewById(R.id.newsButton); 
     newsNext.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       setContentView(R.layout.screen1); 

       // Intent i = new Intent(); 
       // i.setClassName("rahul.application.WunApp", "rahul.application.WunApp.screen1"); 
       // startActivity(i); 
      } 
     }); 




} 
} 

屏幕1:

import java.io.IOException; 
    import java.io.InputStream; 
    import java.net.MalformedURLException; 
    import java.net.URL; 
    import java.util.ArrayList; 
    import java.util.List; 

    import org.xmlpull.v1.XmlPullParser; 
    import org.xmlpull.v1.XmlPullParserException; 
    import org.xmlpull.v1.XmlPullParserFactory; 


    import android.app.ListActivity; 
    import android.content.Intent; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.view.View; 

    import android.widget.ArrayAdapter; 

    import android.widget.ListView; 

    public class Screen1 extends ListActivity { 
     /** Called when the activity is first created. */ 
     List<String> headlines; 
     List<String> links; 





    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     Uri uri = Uri.parse((String) links.get(position)); 
     Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
     startActivity(intent); 
    } 

    @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.screen1); 
     // Initializing instance variables 
      headlines = new ArrayList<String>(); 
      links = new ArrayList<String>(); 



      try { 
       URL url = new URL("http://news.google.com/news?ned=us&topic=h&output=rss"); 

       XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
       factory.setNamespaceAware(false); 
       XmlPullParser xpp = factory.newPullParser(); 

        // We will get the XML from an input stream 
       xpp.setInput(getInputStream(url), "UTF_8"); 

        /* We will parse the XML content looking for the "<title>" tag which appears inside the "<item>" tag. 
        * However, we should take in consideration that the rss feed name also is enclosed in a "<title>" tag. 
        * As we know, every feed begins with these lines: "<channel><title>Feed_Name</title>...." 
        * so we should skip the "<title>" tag which is a child of "<channel>" tag, 
        * and take in consideration only "<title>" tag which is a child of "<item>" 
        * 
        * In order to achieve this, we will make use of a boolean variable. 
        */ 
       boolean insideItem = false; 

        // Returns the type of current event: START_TAG, END_TAG, etc.. 
       int eventType = xpp.getEventType(); 
       while (eventType != XmlPullParser.END_DOCUMENT) { 
        if (eventType == XmlPullParser.START_TAG) { 

         if (xpp.getName().equalsIgnoreCase("item")) { 
          insideItem = true; 
         } else if (xpp.getName().equalsIgnoreCase("title")) { 
          if (insideItem) 
           headlines.add(xpp.nextText()); //extract the headline 
         } else if (xpp.getName().equalsIgnoreCase("link")) { 
          if (insideItem) 
           links.add(xpp.nextText()); //extract the link of article 
         } 
        }else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")){ 
         insideItem=false; 
        } 

        eventType = xpp.next(); //move to next element 
       } 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (XmlPullParserException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      // Binding data 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, headlines); 

      setListAdapter(adapter); 



     } 
    public InputStream getInputStream(URL url) { 
      try { 
       return url.openConnection().getInputStream(); 
      } catch (IOException e) { 
       return null; 
      } 
     } 

主要的xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 



    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:text="@string/welcome" > 

     <requestFocus /> 

    </EditText> 


    <TextView 
     android:id="@+id/textView5" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 


    <TextView 
     android:id="@+id/textView6" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 


    <TextView 
     android:id="@+id/textView7" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 






     <Button 
      android:id="@+id/newsButton" 
      android:layout_width="152dp" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:text="@string/button1" /> 

    </RelativeLayout> 


    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 


    <TextView 
     android:id="@+id/textView4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 


     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" /> 

    </RelativeLayout> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </RelativeLayout> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 





     <Button 
      android:id="@+id/videoButton" 
      android:layout_width="156dp" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:text="@string/button3" /> 

    </RelativeLayout> 

</LinearLayout> 

屏蔽1的xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 



<ListView 
android:id="@+android:id/list" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" > 
</ListView> 

</LinearLayout> 

所以總結一下:當我只有主類和xml時它工作,但現在我鏈接到一個新的類和xml,它不起作用。爲什麼?

回答

0

點1 - 你不應該做與網絡有關的工作,在UI線程使用的AsyncTask或處理線程

點2 - 你必須在main.xml中,但在屏幕截圖1僅適用於XML列表視圖中的各種意見,可能您就有可能沒有在屏幕截圖1數據的敵人名單

點3-使用「@android:ID /列表」爲ID爲ListActivity

<ListView 
    android:id="@android:id/list" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 
</ListView> 
+0

我在screen1中的列表數據應該是Screen1.java中提供的RSS源...但是我能夠在不使用Asynctask的情況下獲得RSS源(不想嘗試使用它,因爲沒有學習瞭如何使用Asynctask)在我的main.xml中,我所需要的就是能夠使用main.xml中的鏈接在screen1.xml中顯示......我知道可能是更有效的方法,但對於我這似乎是最容易理解的。第3點也沒有做任何事情。儘管感謝您的幫助。 –

0

是否有任何與這些在你的代碼被註釋掉

//Intent i = new Intent(); 
      // i.setClassName("rahul.application.WunApp",  "rahul.application.WunApp.screen1"); 
      // startActivity(i);  

你確定在你的清單,你把應用程序塊

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
<activity android:name=".SImpleRssReader2Activity" /> // your class names 
<activity android:name=".screen1" /> 
<activity android:name=".screen2" /> 

您使用意圖時通常需要這些裏面。

側欄: 真的很有趣,你的工作和Iam一樣。我需要一個RSS提要的東西,並嘗試相同的一段代碼。根本不適合我,不知道你是如何得到它的,但很好。我爲我的程序使用了一段不同的代碼。並不是真的習慣於像java這樣的高級語言,我認爲一旦你開始使用C語言就更容易。

相關問題