0

我有一个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);
                }
        });
    }
}
4

3 回答 3

0

传递的参数onPostExecute是从doInBackground方法中获取的。因此,您可能必须从doInBackground. 并添加adapter.notifyDataSetChanged();链接可能会对您有所帮助。

于 2013-02-15T08:54:13.223 回答
0

我有一个未显示的 listView 的问题。我没有收到错误,背景图片和其他文本正在显示,但 listLiew 没有显示。我无法通过调试找到错误。

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

您正在动态地将数据添加到ListAdapteronPostExecute())onProgressUpdate(方法中尝试在您的方法上调用方法ListAdapter

adapter.notifyDataSetChanged();

确实有可能您ListView没有正确刷新,这种方法可以确保它。

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

于 2013-02-15T08:32:06.670 回答
0

在AsyncTask完成后设置您的适配器。

onPostExecute 方法

adapter = new ArrayAdapter<String>(MainActivity.this,
            android.R.layout.simple_list_item_1, sermon);  
于 2013-02-15T08:32:24.820 回答