2013-02-15 140 views
0

我有一個ListView沒有顯示的問題。我得到沒有錯誤和背景圖片和其他文字正在顯示,但ListView不顯示。我無法通過調試找到錯誤。爲什麼我的ListView不顯示?

任何線索是什麼問題?

public class MainActivity extends Activity { 

    List<String> sermon; 
    List<String> links; 
    ArrayAdapter<String> adapter; 
    private ListView list; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     list = (ListView) findViewById(R.id.listView); 
     sermon = new ArrayList<String>(); 
     links = new ArrayList<String>(); 
     adapter = new ArrayAdapter<String>(MainActivity.this, 
         android.R.layout.simple_list_item_1, sermon);   

     new PostTask(this).execute("http://gibk.se/sample-page/predikningar/?podcast"); 
    } 

    public class PostTask extends AsyncTask<String, Long, String> { 

     private Context context; 

     public PostTask(Context context) { 
       this.context = context; 
     } 

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

     @Override 
     protected String doInBackground(String... params) { 
      try { 
       String url = params[0]; 
       URL urls = new URL(url); 

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

       xmlParser.setInput(getInputStream(urls), "UTF_8"); 

       boolean insideItem = false; 

       int eventType = xmlParser.getEventType(); 
       while (eventType != XmlPullParser.END_DOCUMENT) { 
        if (eventType == XmlPullParser.START_TAG) { 
          if (xmlParser.getName().equalsIgnoreCase("item")) { 
            insideItem = true; 
          } else if (xmlParser.getName().equalsIgnoreCase("title")) { 
            if (insideItem) 
              sermon.add(xmlParser.nextText()); 
         } else if (xmlParser.getName().equalsIgnoreCase("guid")) { 
            if (insideItem) 
              links.add(xmlParser.nextText()); 
          } 
        } else if (eventType == XmlPullParser.END_TAG 
            && xmlParser.getName().equalsIgnoreCase("item")) { 
          insideItem = false; 
        } 

        eventType = xmlParser.next(); 
       } 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (XmlPullParserException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 
    } 

    protected void onPostExecute(String result) { 
     list.setAdapter(adapter); 
     list.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> arg0, View v, int position, 
           long arg3) { 
        Uri uri = Uri.parse(links.get(position)); 
        String url = uri.toString(); 

        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setData(Uri.parse(url)); 
        startActivity(intent); 
       } 
     }); 
    } 
} 
+0

請問您可以發佈logcat的輸出。 – Kerry 2013-02-15 10:25:08

回答

0

我有未顯示一個列表視圖的問題。我沒有得到 錯誤,並且背景圖片和其他文本正在顯示,但沒有顯示 listLiew。我不能通過查找找到錯誤。

如果沒有錯誤那麼最有可能的原因可能有兩個原因:

要動態所以在onPostExecute()onProgressUpdate(將數據添加到ListAdapter)方法嘗試調用方法對您的ListAdapter

adapter.notifyDataSetChanged(); 

確實有可能您的ListView未正確刷新,此方法可以確保它。您的ListView可以是空的。嘗試記錄XML parsing是否正確獲取值。

+0

是的,這是錯誤,但我只是從我的XML解析,當我把它放在onCreate中得到值。但只要我將它移動到doTnBackground方法,那麼我的列表就變成空的。爲什麼這樣? – Josef 2013-02-15 08:34:17

+0

我如何寫,嘗試記錄如果您從XML獲得任何價值。如果有錯誤,請在此處添加logcat ... – Sajmon 2013-02-15 08:36:19

+0

XML中沒有值布爾值始終爲false,logcat中沒有錯誤。但在調試中url可以。並且evantType變量對於每個循環 – Josef 2013-02-15 08:43:24

0

設置您的適配器後AsyncTask完成。

onPostExecute方法

adapter = new ArrayAdapter<String>(MainActivity.this, 
      android.R.layout.simple_list_item_1, sermon); 
+0

這doens使任何difffrance – Josef 2013-02-15 08:36:31

+0

是的,你可以試試這個。 – rajeshwaran 2013-02-15 08:39:08

+0

我做了但沒有差異 – Josef 2013-02-15 08:46:42

0

onPostExecute傳遞的參數是從doInBackground方法獲得。所以你可能不得不從doInBackground返回佈道。並且還加adapter.notifyDataSetChanged(); 這個link可以幫到你。