Android ListView setAdapter issue - android

I'm trying to bind data do a listview on android, but I'm not able to.
I saw some code on the internet and it worked, but I just don't know why, and I don't want to create a new ListView on the fly, I want to use the one that is listed on the main.xml
Why I can do this:
ListView lv = new ListView(this);
lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,PEOPLE));
setContentView(lv);
But I can't do this:
ListView listPessoas = (ListView) findViewById(R.id.listPessoas);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.id.listPessoas, PESSOAS);
listPessoas.setAdapter(adapter);

What is R.id.pessoas??
This works fine for me:
String[] x = new String[]{"AAA","BBB","CCC"};
ListView lv = (ListView) findViewById(R.id.listView1);
ArrayAdapter<String> test = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,x);
lv.setAdapter(test);

Your error here is when you are creating the new ArrayAdapter. You are passing R.id.listPessoas as the row view to use for each row. This is the id of the ListView. The adapter is looking for a layout id containing a text view to be used for each row of the list. Change the R.id.listPessoas to android.R.layout.simple_list_item_1 and your code should work. The simple_list_item_1 layout is just a TextView that the data will be bound to.

What you have written is not correct, the second parameter in the array adapter constructor should be the simple layout for each list item not again your list view.
If your have a custom complex layout for your list item you need to write a custom adapter as well.

If you are getting error.
getApplicationContext(); will work instead of 'this'.

Related

Thumbnail with an Array adapter in a list view

Is it possible to show a thumbnail with a Array adapter in a list? The thumbnail is always the same.
final ArrayAdapter myAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1 );
ListView myList = (ListView) findViewById(R.id.list);
myList.setAdapter(myAdapter);
I populate my list with volley.
ArrayAdapter is usually used for populating a ListView widget from array or list of primitive values like String. When you are creating an ArrayAdapter with ArrayAdapter myAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1 ); as the second parameter you have R.layout.simple_list_item_1 which is a layout with only one TextView, so if you need a ImageView alongside a TextView, you will need to create new view that will contain TextView and ImageView widgets and create custom class that will extend Adapter where you will use the newly created view and populate it's views with your content.

Custom adapter size 0 after notifyDataSetChanged()

I have a ListView, an ArrayList and an MaterielAdapter that extends ArrayAdapter. My problem is that calling notifyDataSetChanged() won't update my ListView... I spent 3 hours trying all similar issues on SO but none was efficient for me.
private ListView lvMateriels;
private ArrayList<Materiel> materiels = new ArrayList<>();
...
lvMateriels = new ListView(this);
lvMateriels.setAdapter(new MaterielAdapter(this, R.layout.object_line,materiels));
...
materiels.add(new Materiel());
((MaterielAdapter)lvMateriels.getAdapter()).notifyDataSetChanged();
My collection has all the objects but listview never refreshes, nor the adapter...
You're probably not even adding the ListView to the activity view. Instead of doing new Listview(this), I'd recommend you to define a listview in your layout xml
Something like:
<ListView
android:id="#+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Then in your activity:
lvObjects = (ListView) findViewById(R.id.listview);
Found out solution
My problem was that I was setting my ArrayList another ArrayList
materiels = getMateriels() // getMateriels() returns an ArrayList<Materiel>
It seems that setting a new object to the list doesn't work, what I finally did is the following :
materiels.clear();
materiels.addAll(getMateriels());
And by the way for those who need to have a header into their ListView, you have to do like :
((YourAdapter)((HeaderViewListAdapter)yourListView.getAdapter()).getWrappedAdapter()).notifyDataSetChanged();
Stock your adapter, and your adapter will be your list too.
MaterialAdapter adapter = new MaterialAdapter(this,
R.layout.object_line);
lvObjects = new ListView(this);
lvObjects.setAdapter(adapter);
...
adapter.add(new Object());
adapter.notifyDataSetChanged();
Currenlty your adapter, do not know that he need to use the list that you pass in argument. But you extends ArrayAdapter, that means that your adapter is a list.

Adding subitem to ListView

ListView list = (ListView) findViewById(R.id.listView1);
ArrayAdapter<String> dataAdaptor = new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, android.R.id.text1, cars);
list.setAdapter(dataAdaptor);
I write that codes for listview but I don't know how I get data for subitem. How can I do this?
A ListView item can have it's own custom layout. When you create your adapter for the ListView you can pass in the layout id to the Adapter constructor.
If you want to show some more details like image and text or two textview then You will have to extend an Adapter and implement getView() to property set the image+text.
please check this answer with examples.

Populating ListView with ArrayAdapter force closes

I am trying to use the following code to populate a ListView using a predefined array of strings:
String[] schedule_names = getResources().getStringArray(R.array.test_schedules);
// Populate the ListView using the array of schedule names
ArrayList<String> als = new ArrayList<String>(Arrays.asList(schedule_names));
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.id.listView, als);
adapter.add("Test");
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
But it force closes unless I comment out listView.setAdapter(adapter); (which obviously means the ListView isn't populated at all). It seems the reason is a NullPointerException.
Why is this?
This line is wrong...
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.id.listView, als);
...the second parameter of the constructor should not be your ListView, it should be a layout with a TextView.
Try replacing R.id.listView with android.R.layout.simple_list_item_1

Adapt ArrayList into ListView

I have a XML File and I had parsed the data into the textView successfully now I want to bind that data into the ArrayList or List and display it in ListView.
But I don't know how to bind arraylist data into the ListView.
I have added all data into the arraylist successfully as mentioned in the below code.
List al = new ArrayList();
al.add(parser.getAttributeValue(null, "firstnames"));
Kindly please help me with the code syntax for the above issue.
Regards .
Thanks in advace
please have a look at the sample at http://codinglookseasy.blogspot.in/2012/07/android-list-view-sample.html
Instead of this
aa = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, months);
setListAdapter(aa);
use this in your case
aa = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, al);
setListAdapter(aa);
You need to use an Adapter to bind a List to a ListView, like this:
List<String> list = new ArrayList<String>();
// add data to list
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
Notice that the subtype of List (which is String) matches the subtype of the ArrayAdapter (also String). The layout android.R.layout.simple_list_item_1 defines how the String is displayed in every row. You can look up the specifics of this layout in your SDK, if you want you can also use you own layout. Hope that helps, good luck learning Android!

Categories

Resources