【问题标题】:Multiple listviews in relative layout?相对布局中的多个列表视图?
【发布时间】:2013-03-21 23:37:04
【问题描述】:

我在为我的提要使用列表视图时遇到了麻烦。我在同一个活动中将两个提要放在彼此之上,一个流新闻,现在我将事件添加到底部,但它无法识别第二个列表视图的 android id ???

<ListView
        android:id="@android:id/list"
        android:background="@color/red"
        android:layout_toRightOf="@+id/map"
        android:layout_width="260dp"
         android:layout_marginTop="5dp"
        android:layout_marginLeft="10dp"
        android:layout_height="413dp" />

第一个列表视图完美运行。

<ListView  
        android:id="@+id/android:list1"
        android:background="@color/blue"
        android:layout_toRightOf="@+id/button3"
        android:layout_width="260dp"
        android:layout_marginTop="430dp"
        android:layout_marginLeft="6dp"
        android:layout_height="390dp" />

这个列表视图不起作用??我知道它的android id吗?我尝试了几种变化?

android:id="@+id/android:list1"
android:id="@android:id/list1"
android:id="@+id/list1"

需要任何帮助吗? 我花了几个小时浏览代码,现在我知道它的 id 就是问题所在,因为如果我交换 listview 活动,那么第二个 listview 可以工作??

private class MyTask extends AsyncTask<Void, Void, Void>{

            @Override
            protected Void doInBackground(Void... arg0) {
                try {
                    URL rssUrl = new URL("http:/news.rss");
                    ///URL rssUrl1 = new URL("http://events.rss");

                    SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
                    SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
                    XMLReader myXMLReader = mySAXParser.getXMLReader();
                    RSSHandler myRSSHandler = new RSSHandler();
                    myXMLReader.setContentHandler(myRSSHandler);

                    InputSource myInputSource = new InputSource(rssUrl.openStream());
                    myXMLReader.parse(myInputSource);
                    ///InputSource myInputSource1 = new InputSource(rssUrl1.openStream());
                    ///myXMLReader.parse(myInputSource1);

                    myRssFeed = myRSSHandler.getFeed(); 
                    ///myRssFeed1 = myRSSHandler.getFeed(); 

                } catch (MalformedURLException e) {
                    e.printStackTrace();    
                } catch (ParserConfigurationException e) {
                    e.printStackTrace();    
                } catch (SAXException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();    
                }

                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                if (myRssFeed!=null || myRssFeed1!=null)
                {
                    TextView feedupdate = (TextView)findViewById(R.id.feedupdate);
                    feedupdate.setText(myRssFeed.getupdate());
                    //TextView feedupdate1 = (TextView)findViewById(R.id.feedupdate1);
                    ///feedupdate1.setText(myRssFeed1.getupdate());

                    ArrayAdapter<RSSItem> adapter =
                            new ArrayAdapter<RSSItem>(getApplicationContext(),
                                    android.R.layout.simple_list_item_1,myRssFeed.getList());
                    setListAdapter(adapter);
                    ///ArrayAdapter<RSSItem> adapter1 =
                            //new ArrayAdapter<RSSItem>(getApplicationContext(),
                                    //android.R.layout.simple_list_item_1,myRssFeed1.getList());
                    //setListAdapter(adapter1);

                }else{

                    TextView textEmpty = (TextView)findViewById(android.R.id.empty);
                    textEmpty.setText("No Feed Found");
                }

                super.onPostExecute(result);
            }   

        }   
        @Override
        protected void onListItemClick(ListView l, View v, int position, long id) {

            Uri feedUri = Uri.parse(myRssFeed.getItem(position).getLink());
            Uri feedUri1 = Uri.parse(myRssFeed1.getItem(position).getLink());
            Intent myIntent = new Intent(Intent.ACTION_VIEW, feedUri);
            Intent myIntent1 = new Intent(Intent.ACTION_VIEW, feedUri1);
            startActivity(myIntent);
            startActivity(myIntent1);
        }
    }

public class HomeActivity extends ListActivity {
          static final LatLng TULLAMORE = new LatLng(53.28000, -7.49000);
          static final LatLng MRA = new LatLng(53.274823, -7.492655);
          private GoogleMap map;
          private RSSFeed myRssFeed = null;
          private RSSFeed myRssFeed1 = null;
          @Override


          protected void onCreate(Bundle savedInstanceState) {
            requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);  
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main); 
            getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);
            new MyTask().execute();


            map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                .getMap();
            Marker tullamore = map.addMarker(new MarkerOptions().position(TULLAMORE)
                .title("Tullamore"));
            Marker mra = map.addMarker(new MarkerOptions()
                .position(MRA)
                .title("-")
                .snippet("Hey :-)")
                .icon(BitmapDescriptorFactory
                    .fromResource(R.drawable.ic_launcher)));

            map.moveCamera(CameraUpdateFactory.newLatLngZoom(TULLAMORE, 70));
            // Zoom in, animating the camera.
            map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
            map.setMyLocationEnabled(true);
            map.getUiSettings().setZoomControlsEnabled(true);
            map.getUiSettings().setMyLocationButtonEnabled(true);
            map.setTrafficEnabled(true);
            Button button1 = (Button) findViewById(R.id.button1);
            Button button2 = (Button) findViewById(R.id.button2);
            Button button3 = (Button) findViewById(R.id.button3);
            Button button4 = (Button) findViewById(R.id.button4);

            button2.setOnClickListener(new View.OnClickListener() { 
                @Override
                public void onClick(View arg0) {
                    //Starting a new Intent
                    Intent FavouritesScreen = new Intent(getApplicationContext(),FavouritesActivity.class); 
                    startActivity(FavouritesScreen);
                }
                });

            button4.setOnClickListener(new View.OnClickListener() { 
                @Override
                public void onClick(View arg0) {
                    //Starting a new Intent
                    Intent NearbyScreen = new Intent(getApplicationContext(), NearbyActivity.class);    
                    startActivity(NearbyScreen);
                }
                });

            button3.setOnClickListener(new View.OnClickListener() { 
            @Override
            public void onClick(View arg0) {
                //Starting a new Intent
                Intent TourismScreen = new Intent(getApplicationContext(), TourismActivity.class);  
                startActivity(TourismScreen);   
            }
            });

            button1.setOnClickListener(new View.OnClickListener() { 
                @Override
                public void onClick(View arg0) {
                    //Starting a new Intent
                    Intent MapScreen = new Intent(getApplicationContext(), MapActivity.class);  
                    startActivity(MapScreen);   
                }
                });
          }

            @Override
            public boolean onCreateOptionsMenu(Menu menu) {
              getMenuInflater().inflate(R.menu.home, menu);
              return true; 

            }
            private class MyTask extends AsyncTask<Void, Void, Void>{

                @Override
                protected Void doInBackground(Void... arg0) {
                    try {
                        URL rssUrl = new URL("http://www.midlandsireland.ie/news.rss");
                        URL rssUrl1 = new URL("http://feedity.com/midlandsireland-ie/V1pUU1VR.rss");

                        SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
                        SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
                        XMLReader myXMLReader = mySAXParser.getXMLReader();
                        RSSHandler myRSSHandler = new RSSHandler();
                        myXMLReader.setContentHandler(myRSSHandler);

                        InputSource myInputSource = new InputSource(rssUrl.openStream());
                        myXMLReader.parse(myInputSource);
                        InputSource myInputSource1 = new InputSource(rssUrl1.openStream());
                        myXMLReader.parse(myInputSource1);

                        myRssFeed = myRSSHandler.getFeed(); 
                        myRssFeed1 = myRSSHandler.getFeed();    

                    } catch (MalformedURLException e) {
                        e.printStackTrace();    
                    } catch (ParserConfigurationException e) {
                        e.printStackTrace();    
                    } catch (SAXException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();    
                    }

                    return null;
                }

                @Override
                protected void onPostExecute(Void result) {
                    if (myRssFeed!=null || myRssFeed1!=null)
                    {
                        TextView feedupdate = (TextView)findViewById(R.id.feedupdate);
                        feedupdate.setText(myRssFeed.getupdate());
                        TextView feedupdate1 = (TextView)findViewById(R.id.feedupdate1);
                        feedupdate1.setText(myRssFeed1.getupdate());
                        ListView newsfeed = (ListView)findViewById(android.R.id.list);
                        ListView eventsfeed = (ListView)findViewById(R.id.list1);

                        ArrayAdapter<RSSItem> adapter =
                                new ArrayAdapter<RSSItem>(getApplicationContext(),
                                        android.R.layout.simple_list_item_1,myRssFeed.getList());                   
                        setListAdapter(adapter);

                    }else{

                        TextView textEmpty = (TextView)findViewById(android.R.id.empty);
                        textEmpty.setText("No Feed Found");
                    }

                    super.onPostExecute(result);
                }   

            }   
            @Override
            protected void onListItemClick(ListView l, View v, int position, long id) {     
                Uri feedUri = Uri.parse(myRssFeed.getItem(position).getLink());
                Intent myIntent = new Intent(Intent.ACTION_VIEW, feedUri);
                startActivity(myIntent);
            }
        }

【问题讨论】:

    标签: android android-layout listview


    【解决方案1】:

    这个ID:

    android:id="@+id/android:list1"
    android:id="@android:id/list1"
    

    SDK 中不存在。 id android:id="@+id/list1" 是有效的,如果你在Activity 中使用findViewById(R.id.list1)(它的内容是带有两个ListViews 的布局),你会发现ListView

    另外,正如您的代码所暗示的那样,您似乎正试图将两个 ListViews 操纵为一个,这是完全错误的。在onPostExecute() 方法中,您将使用setListAdapter() 方法为带有id android.R.id.listListView 和另一个ListView 设置适配器:

    ListView second = (ListView) findViewById(R.id.list1);
    // set the adapter for this ListView
    

    关于此代码:

            Uri feedUri = Uri.parse(myRssFeed.getItem(position).getLink());
            Uri feedUri1 = Uri.parse(myRssFeed1.getItem(position).getLink());
            Intent myIntent = new Intent(Intent.ACTION_VIEW, feedUri);
            Intent myIntent1 = new Intent(Intent.ACTION_VIEW, feedUri1);
            startActivity(myIntent);
            startActivity(myIntent1);
    

    开始两个(?!?!)活动(做什么?!)?

    编辑:

    try {
                    URL rssUrl = new URL("http:/news.rss");
                    SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
                    SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
                    XMLReader myXMLReader = mySAXParser.getXMLReader();
                    RSSHandler myRSSHandler = new RSSHandler();
                    myXMLReader.setContentHandler(myRSSHandler);
                    InputSource myInputSource = new InputSource(rssUrl.openStream());
                    myXMLReader.parse(myInputSource);
                    myRssFeed = myRSSHandler.getFeed(); 
    
                    RSSHandler myRSSHandler1 = new RSSHandler();
                    myXMLReader.setContentHandler(myRSSHandler1);
    
                    URL rssUrl1 = new URL("http://events.rss");
                    InputSource myInputSource1 = new InputSource(rssUrl1.openStream());
                    myXMLReader.parse(myInputSource1);
                    myRssFeed1 = myRSSHandler1.getFeed(); 
                } catch (MalformedURLException e) {
                    e.printStackTrace();    
                } catch (ParserConfigurationException e) {
                    e.printStackTrace();    
                } catch (SAXException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();    
                }
    
     @Override
            protected void onPostExecute(Void result) {
                if (myRssFeed!=null && myRssFeed1!=null) {
                    ArrayAdapter<RSSItem> adapter =
                            new ArrayAdapter<RSSItem>(getApplicationContext(), android.R.layout.simple_list_item_1, myRssFeed.getList());
                    setListAdapter(adapter);
                    ArrayAdapter<RSSItem> adapter1 =
                           new ArrayAdapter<RSSItem>(getApplicationContext(),            android.R.layout.simple_list_item_1,myRssFeed1.getList());
                    ListView lv = (ListView) findViewById(R.id.list1);
                    lv.setAdapter(adapter1);
                } else {
                 setListAdapter(new ArrayAdapter<RSSItem>(getApplicationContext(),            android.R.layout.simple_list_item_1, new ArrayList<RSSItem>()););
                 ArrayAdapter<RSSItem> adapterEmpty1 = 
                           new ArrayAdapter<RSSItem>(getApplicationContext(),            android.R.layout.simple_list_item_1, new ArrayList<RSSItem>());
                    ListView lv = (ListView) findViewById(R.id.list1);
                    lv.setAdapter(adapterEmpty1);
                }   
    
            }   
    

    【讨论】:

    • ListView newsfeed = (ListView)findViewById(android.R.id.list); list.setListAdapter(newsfeed); ListView eventsfeed = (ListView)findViewById(R.id.list1); list1.setListAdapter(eventsfeed);
    • @JosephKenny 是的,像上面一样为每个ListView(它自己的适配器)设置适配器。
    • @JosephKenny 是的,但是您需要为两个ListViews 中的每个创建一个适配器。你真的应该在 android 开发者网站上学习一些关于 ListViews 的基本教程。
    • 我知道我还在学习,我正在查看开发人员网站,但找不到任何可以帮助我的东西。我需要做的就是让第二个 RSS 提要正常工作。你能告诉我如何为@luksprog 的两个列表视图中的每一个创建一个适配器吗??
    • @JosephKenny 你可以用答案附近的复选标记将我的答案标记为正确,从而更加感谢我:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多