Programatically replace String Array in a ListView Array Adapter - android

I have a ListView that i have populated with a string array: {"1","2","3"} using an Array Adapter.
(ListView) ListOptions = (ListView)findViewById(R.id.ListOptions);
String[] exampleString = new String[]{"1","2","3"};
ListAdapter adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,exampleString);
ListOptions.setAdapter(adapter);
Later on, i want to be able to change exampleString to exampleString2:
{"4","5","6"}
and have the ListView update with exampleString2 displayed as the list options.
is there something i can do along the lines of:
adapter.ChangeStringArray(exampleString2);
ListView.setAdapter(adapter);
I want to avoid having to create a new adapter each time I change the String array that is populating the list items.

ArrayAdapter has methods for managing the backing data array.
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, new ArrayList<String>());
adapter.addAll(exampleString);
adapter.clear();
adapter.addAll(exampleString2);
adapter.notifyDataSetChanged();

Related

Data is not Updated in the List View on calling arrayAdapter.notifyDataSetChanged()

Main Activity
task_list = (ListView) findViewById(R.id.task_list);
elements = dbHelper.getTasks();
arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, elements);
task_list.setAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();
dbHelper.addTasks(tasks.getText().toString());
Data has reached from Database to Array list but not Updated in List View
Is there any problem in the position of the notifying the change of data
You need to call arrayAdapter.notifyDataSetChanged(); after adding the task and update the elements array also.
dbHelper.addTasks(tasks.getText().toString());
elements=dbHelper.getTasks();
arrayAdapter.notifyDataSetChanged();

How I can populate a ListView with a Cursor?

Is it possible to load all items in the adapter at once?
I am using a CursorLoader, a ListView and a Cursor adapter, the items in the the adapter are loaded with scrolling.
I know I have only few simple items (about 10) so I do not have performance problems
Thanks
Read this Populating-a-ListView-with-a-CursorAdapter or this Android Cursor Example
If you want to use an ArrayList (getted from Populating a ListView using an ArrayList):
lv = (ListView) findViewById(R.id.your_list_view_id);
// Instanciating an array list (you don't need to do this,
// you already have yours).
List<String> your_array_list = new ArrayList<String>();
your_array_list.add("foo");
your_array_list.add("bar");
// This is the array adapter, it takes the context of the activity as a
// first parameter, the type of list view as a second parameter and your
// array as a third parameter.
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_1,
your_array_list );
lv.setAdapter(arrayAdapter);

When I add a new item in Listview previous values ​​are deleted

When I add a new item in my ListView it is losing the values ​​that existed. It appears only the new value that was added. The goal is to add a new value without losing existing ones.My Code:
List<string> list = new List<string>();
void btnAddItem_Click(object sender, EventArgs e)
{
ArrayAdapter<string> adapter;
string edttxNewItem = FindViewById<EditText>(Resource.Id.newItem).Text;
ListView listItems = FindViewById<ListView>(Resource.Id.ListOfItems);
list.Add(edttxNewItem);
adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, list);
listItems.Adapter = adapter;
listItems.DeferNotifyDataSetChanged();
}
I am unfamiliar about xamarin,but it seems that you are trying to create listview instance each time on btnAddItem_Click.
So initialise listItems in oncreate method as
listItems = FindViewById<ListView>(Resource.Id.ListOfItems);
and define listItems as class variable.
And also set adapter outside of btnAddItem_Click,let say in OnCreate method.
adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, list);
In btnAddItem_Click just add edttxNewItem in listItems and do notifydatasetchanged equivalent in xamarin.
Every time you click in the button you are instantiating a new arraylist (List list = new List();). So, every previous values in the array are deleted

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