PropK
PropK

Reputation: 687

Multiple listviews in relative layout?

Im having trouble with using listviews for my feeds. I have two feeds placed on top of each other in the same activity one streams news, now im adding events to the bottom one yet it cant recognise the android id of the second listview???

<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" />

This first listview works perfectly.

<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" />

This listview doesnt work?? i know its about the android id? ive tried several variations?

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

Any help needed? Ive spent hours trawling through code and i now know its the id thats the problem because if i swap the listview activities then the second listview works??

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);
            }
        }

Upvotes: 1

Views: 664

Answers (1)

user
user

Reputation: 87064

This ids:

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

don't exist in the SDK. The id android:id="@+id/list1" is valid and if you use findViewById(R.id.list1) in the Activity(which has as its content the layout with the two ListViews) you'll find the ListView.

Also, as your code suggests it appears you're trying to manipulate the two ListViews as one which would be plain wrong. In the onPostExecute() method you'll use the setListAdapter() method to set the adapter for the ListView with the id android.R.id.list and for the other ListView you'll do:

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

Regarding this code:

        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);

what are you trying to do starting two(?!?!) activities(to do what?!)?

Edit:

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);
            }   

        }   

Upvotes: 1

Related Questions