为什么我的ListView没有显示?

时间:2013-02-15 08:28:32

标签: java android 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);
                }
        });
    }
}

3 个答案:

答案 0 :(得分:0)

  

我的listView没有显示问题。我没有   错误和背景图片和其他文字是有差异的但是   listLiew没有显示。我不能通过去除来找到错误。

如果没有错误,那么最有可能出现两个原因:

您正在向ListAdapter动态添加数据,因此在onPostExecute()onProgressUpdate()方法尝试调用ListAdapter上的方法

adapter.notifyDataSetChanged();

您的ListView确实有可能无法正确刷新,此方法可以确保它。

您的ListView可能为空。尝试记录XML parsing是否正确获取值。

答案 1 :(得分:0)

AsyncTask 完成后设置适配器。

onPostExecute 方法

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

答案 2 :(得分:0)

onPostExecute传递的参数来自doInBackground方法。所以你可能要从doInBackground返回布道。并添加adapter.notifyDataSetChanged();link可能会对您有所帮助。

相关问题