Double rows in a listview with ArrayAdapter (Android) - android

I'm new to android programming and I would like some help. I have the following code:
Object[] list_cities = parsedData.getCityname().toArray();
Object[] list_countries = parsedData.getCountryname().toArray();
// Display the available locations
list_search.setAdapter(new ArrayAdapter<Object>(this, android.R.layout.simple_list_item_2, android.R.id.text1, list_cities));
list_search.setAdapter(new ArrayAdapter<Object>(this, android.R.layout.simple_list_item_2, android.R.id.text2, list_countries));
I would like to display double rows for each entry in the list (city and country) but I have no luck. With the above code I only see the countries but not the cities. Is there any way to add both the adapters to the list_search so I can see all the data?
Thank you all for your answers!!

Create a custom container object, maybe CountryCityLocation, with a couple strings for country and city name.
Create an array of these containers and fill it with your information.
Create a custom ArrayAdapter, maybe CountryCityAdapter, apply the array to the custom adapter, and feed it to getListView.setAdapter.
Override the ArrayAdapter's getView method to apply your name strings to TextViews in your custom list row view.
EDIT - removed dead tutorial link

You can bind only one adapter to ListView.
If you want to combine adapters you need to implement custom adapter.
For example you can inherit SimpleAdapter, provide two simple adapters in constructor and combine data in in getItem method.

Related

Single & Multiple Items Select in listview using listadapter in listactivity

I am using customized listview with listadaper in listactivity.I want to add the option for single & multiple items selecting in listview.I searched about this but all are using check box with adapter class.I dont have any adapter class in my app.I am using listactivity with no adapter class.So how can i get the view of checkbox for single /multiple select?
My adapter:
ListAdapter adapter = new SimpleAdapter(getApplicationContext(), entriesList,R.layout.new_todo_singleentry, new String[]
{"``id","time","date","message","status"},new int[] { R.id.todo_id,R.id.todo_time,R.id.todo_date,R.id.todo_entry});
I'm not aware of an option to do this without a custom adapter class.
I would advice you to read this and use the example in chapter 14 to create the functionality that you are looking for.

Android Custom ListView/Adapter

I am wanting to change my listView from the normal ArrayAdapter (simple_list_item_1) to something more like this:
Name..... Score(center right).
Date (under name)
So There's 3 Views...
name
date
score
I've looked up how to make custom adapters and layouts but they are all very confusing. I just want a simple fix that I can add to an existing project.
Here's my code for my list right now:
//update listView
listAdapter = new ArrayAdapter<String>(GradesActivity.this, android.R.layout.simple_list_item_1, names);
mListView.setAdapter(listAdapter);
Help is appreciated!
I just had the SAME problem last week. My solution was a tutorial on the internet: http://androidtuts4u.blogspot.com.br/2013/02/android-list-view-using-custom-adapter.html
Just copying and pasting the code onto a temporary project (it will take less than 15 minutes) will help you understand how simple it is and also make it very clear so you can implement it into your original project. I hope it helps!
Peace!
ArrayAdapter can't auto binding three view
You can try SimpleAdapter or extend BaseAdapter implements it youself
This is Google's training
https://developer.android.com/training/material/lists-cards.html
https://developer.android.com/training/wearables/ui/lists.html
And here is a sample of SimpleAdapter http://www.java2s.com/Code/Android/UI/UsingSimpleAdaptertofilldatatoListView.htm
There are many fixes you need to do
1. Create a class that extends BaseAdapter.
Override all the methods create a constructor of that class that will initialize listitems
You are just passing names
listView listAdapter = new ArrayAdapter(GradesActivity.this, android.R.layout.simple_list_item_1, names);
Instead of just names create a class that contains three elements you need I.e name date and score and make there get and set methods
And the object of the class will be saved in a list.
4. In getview method you have to set these variables

How to fill cells of a GridView with lists of names?

I have a GridView, each cell of which I would like to populate with a list of names, and I need these lists to be dynamically changeable. I tried implementing this idea as follows:
public void fillBoard(int groupSize){
int numGroups = listPresentMembers.size()/groupSize;
ListView [] groups = new ListView [numGroups];
for(int i=0;i<numGroups;i++){
String [] items = new String[groupSize];
for(int j=0;j<groupSize;j++){
items[j] = listPresentMembers.get(i*groupSize + j);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,android.R.id.text1,items);
groups[i] = new ListView(this);
groups[i].setAdapter(adapter);
}
ArrayAdapter<ListView> groupsAdapter = new ArrayAdapter<ListView>(this,
android.R.layout.simple_list_item_1,android.R.id.text1,groups);
gridViewBoard.setAdapter(groupsAdapter);
}
The essential idea is that I create an ArrayAdapter of type ListView, each item of which is defined by one of the groups of names I would like to populate a particular cell of the GridView. I then set this ArrayAdapter to my GridView.
The problem is that when I run the app, the elements of the GridView are strings such as
"android.widget.ListView#41bcfa60". Where did I go wrong?
Thanks very much!
Short answer: whenever you see something like "android.widget.ListView#41bcfa60", it means that something in your code was expecting a String and you gave it an object (in this case, a ListView) instead.
So what happened? Take a look at the adapter for your GridView.
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,android.R.id.text1,items);
Here's the constructor for the ArrayAdapter you're using:
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)
Parameters
context The current context.
resource The resource ID for a layout file containing a layout to use when instantiating views.
textViewResourceId The id of the TextView within the layout resource to be populated
objects The objects to represent in the ListView.
You're passing android.R.layout.simple_list_item_1 as the resource, which means it's the layout you're using. This layout consists of a single TextView--a single line of text. It is not designed to hold a ListView.
When this layout wants to populate the TextView (the textViewResourceId), it looks at the appropriate element of the array (items) that you passed in and tries to get text out of it--in Java we do this by calling toString() on an object. If toString() is not implemented, by default it returns something like the "android.widget.ListView#41bcfa60" gibberish that you got.
That's the why, but I think your code has bigger problems. If I were you, I'd strongly reconsider a design that involves a GridView where each grid item is a ListView. That is not conventional at all, so there's probably a better way to accomplish whatever you're trying to do. Consider posting another question explaining your goal and asking for code design help.

Is there a simple list widget in android that lets me select from a list without having to create an adapter?

I have a list, I want the user to select one. It's a string. Maybe even have an Object I can associate with it.
Is there any way to do this without creating a subclass with an arrayadapter?
I see tons of examples and they all seem overengineered for what must be the most basic list handling problem in the world. Is there no default simple list string handler built in?
If there is, I can't find it.
Help?
Is there no default simple list string handler built in?
ListView is a simple list string handler that's built in.
Is there any way to do this without creating a subclass with an
arrayadapter?
You don't have to subclass ArrayAdapter to use it. Binding the data to ListView is one line of code:
final ListView list = ...;
list.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data));
In your case, data would either be a List<String> or a String[].

Which is the correct way to add item into ArrayAdapter

Consider the following code.
List<String> list = new ArrayList<String>();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, resource, textViewResourceId, list);
// Method 1 : Add an item.
adapter.add("ITEM1");
// Method 2 : Add an item
list.add("ITEM2");
I was wondering, which is the correct way to add item into ArrayAdapter? As seems to me, both methods just work fine.
Method 1 updates the associated AdapterView, if you have already attached the ArrayAdapter to the AdapterView. Method 2 does not, requiring you to call notifyDataSetChanged() on the ArrayAdapter.
Typically, you populate the ArrayList before creating the ArrayAdapter, then use Method 1 to add new entries dynamically later on (e.g., based on user data entry).
This is what I do, especially for my Search Results page - where it grows as the user scroll down (list changes).
I'd keep a local ArrayList of Strings that is global to the class,
Initialize the adapter (also locally and globally),
Have a designated method alter the ArrayList of strings,
Then call the adapter.notifyDataSetChanged();
This will not only update your list and also update the adapter to work in sync.
Hope this helps,
best,
-serkan

Categories

Resources