繁体   English   中英

为什么我的ListView不显示?

[英]Why is my ListView not Displaying?

我有一个不显示的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);
                }
        });
    }
}

我有一个没有显示的listView问题。 我没有错误,背景图片和其他文本显示,但listLiew没有显示。 我无法通过侦查发现错误。

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

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

adapter.notifyDataSetChanged();

实际上,您的ListView可能没有正确刷新,此方法可以确保刷新。

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

AsyncTask完成后设置适配器。

onPostExecute方法

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM