ArrayAdapter with Json Parsing - java

i'm doing a system of news feed, so, i've a difficulty for adapter my ArrayAdapter insert value into ListView, with: "username, name, picture, content and others values" i'm newbie in Android Studio.
Searching the internet I found this function
HashMap<String,String> persons = new HashMap<String,String>();
persons.put(TAG_ID,id);
persons.put(TAG_NAME,name);
persons.put(TAG_ADD,address);
personList.add(persons);
}
ListAdapter adapter = new SimpleAdapter(
MainActivity.this, personList, R.layout.list_item,
new String[]{TAG_ID,TAG_NAME,TAG_ADD},
new int[]{R.id.id, R.id.name, R.id.address}
);
list.setAdapter(adapter);
But, i use ArrayList and ArrayAdapter:
ArrayList<Post> postList =
new JsonConverter<Post>().toArrayList(s, Post.class);
ArrayList<String> postador = new ArrayList<String>();
for(Post value: postList){
postador.add(value.id_postador);
postador.add(value.post_legenda);
if(value.post_foto != null) {
postador.add(value.post_foto);
}
postador.add(value.post_data);
postador.add(value.curtidas);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_list_item_1, postador
);
lvPost.setAdapter(adapter);
I tried it, but no success.
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this,
R.layout.list_item, postador, new String[]{TAG_ID,TAG_NAME,TAG_ADD},
new int[]{R.id.id, R.id.name, R.id.address}
);
There a method convert ListAdapter in ArrayAdapter or adapter my ArrayAdapter for ListAdapter?

If you are a newbie to Android, I would like to recommend few things to you.
1). Start Using RecyclerView from the very beginning instead of ListView. It is more advanced, flexible and efficient version of ListView. You can find a sample demo for the RecyclerView here and here
2). If you still want to use ListView. Then you further have two options, either to use BaseAdapter or ArrayAdapter.
a). Base Adapter as the name suggests, is a base class for all the adapters. If you need more flexibility, you can go with it. You can find the demo sample here and here
b). On the other hand, ArrayAdapter is a concrete BaseAdapter that is backed by an array of arbitrary objects. By default this class expects that the provided resource id references a single TextView.If you want to use a more complex layout, use the constructors that also takes a field id. That field id should reference a TextView in the larger layout resource.To use something other than TextViews (like in your case) for the array display, for instance, ImageViews, or to have some of data besides toString() results fill the views, override getView(int, View, ViewGroup) to return the type of view you want. You can find the demo sample here and here.
Hope it will help you in future and also I suppose you will get answer to your question in the specified demo samples. Thanks and have a good day.. :)

Related

How do we add livedata to spinner in Java

How can we use livedata in spinners? I have the following:
ArrayAdapter<CharSequence> adapter;
LiveData<List<Site>> sites = SiteDatabase.getInstance(this).siteDao().getAllSites();
Spinner spinner = findViewById(R.id.spinnerSites);
adapter = new ArrayAdapter<Site>(this,
this,android.R.layout.simple_spinner_dropdown_item, sites); //What Goes Here ? This gives Cannot Resolve Constructor Error...
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
Thanks!
You need to replace this line
adapter = new ArrayAdapter<Site>(this,android.R.layout.simple_dropdown_item_1line, sites);
with this
adapter = new ArrayAdapter<Site(this,android.R.layout.simple_dropdown_item_1line, sites.getValue());
The signature for your ArrayAdapter is like this ArrayAdapter(Context context, int resource, List<Site> objects). You are correctly passing the Context and int param however the last param needs to be a List<Site> instead of a LiveData<List<Site>.

build list from array and allow list to be clickable

I'm trying to build and Android app:
How can I build a list on screen from an array and have the list be clickable?
with a value of the name to be able to use later stored in a String.
What I have now.
String game_list[] = {"game_0","game_2","game_3","game_3","game_4","game_5"};
for(int i=0; i<game_list.length; i++){
myText = myText + game_list[i] +"\n";
}
myTextView.setText("");
myTextView.append(myText);
Also you can use a spinner and adapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, game_list); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
Here's a super simple example that I have used: http://www.javacodegeeks.com/2013/06/android-listview-tutorial-and-basic-example.html.
You basically need to make a listview object and add it to whatever view you happen to be using. Then you add "extends ListActivity" to the activity and add your list to the listactivity like so:
ArrayAdapter<String> directoryList = new ArrayAdapter<String>(this,R.layout.file_row, this.directoryEntries);
ListView fileList = (ListView) findViewById(android.R.id.list);
fileList.setAdapter(directoryList);
Call:
protected void onListItemClick(ListView l, View v, int position, long id)
to associate actions with your listview elements
You can build that with ListView control in android and here very good tutorial about it to get more understand how to build it with the array or from any other data source like from database
http://www.vogella.com/tutorials/AndroidListView/article.html
feed be back in any thing not obvious for you

Forcing AutoCompleteTextView dropdown List

I am making an Async request to download some data once the data is downloaded i clear the old list and add the new items in the onPostExecute() of the Async to the adapter of AutoCompleteTextView and I call
adapter.setNotifyOnChange(true);
adapter.notifyDataSetChanged();
But i am not able to show the dropdown again ??
Any suggestion would be most appreciated
I solved it here is the solution
All I needed was to reinitialze the variable and call the notify the dataset has changed
arrayAdapter = new ArrayAdapter<String> (this,android.R.layout.select_dialog_item,newDownloadedList);
AutoCompleteTextView.setAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();
you can use this
arrayAdapter = new ArrayAdapter<String>
(this,android.R.layout.select_dialog_item,newList);
AutoCompleteTextView.setAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();
then call
AutoCompleteTextView.showDropDown();

How to get TextView from ListView item?

I have following code for making ListView:
SimpleAdapter adapter=new SimpleAdapter(this, DictionaryDbWrapper.getInstance().getAllWords(),
android.R.layout.simple_list_item_2, new String[]{DictionaryDbHelper.WORD, DictionaryDbHelper.CATEGORY},
new int[]{android.R.id.text1, android.R.id.text2});
mList.setAdapter(adapter);
It works and show me elements, all correct. Also I have OnItemClickListener with following code for clicking by items:
View view=mList.getSelectedView();
if (view==null) {
Toast.makeText(UpdatingWordActivity.this, "1", Toast.LENGTH_LONG).show();
}
But mList.getSelectedView() returns me null also. Why?
UPDATE: why does this cast throw exception:
View v=(View)mList.getItemAtPosition(0);
The call to getSelectedView() is for when you use radio buttons with the listview. See CHOICE_MODE_SINGLE. getItemAtPosition() just calls getItem(position) on the underlying adapter; in your case it's a SimpleAdapter. That casting throws an exception because SimpleAdapter.getItem() isn't returning a view, it's returning (I believe) the Map of data that is at the given position in the adapter. Other adapters return other things for the getItem() method. For instance, the CursorAdapter returns a cursor.
See the answer above for the answer to the first question
Listview OnItemClickListener has View v as parameter, you need to use this parameter to get text.
Here is Android tutorial on this topic .

how do I add items to listview dynamically in android

Can anybody help me? I'm trying to create a ListView in Android, and I'm trying to load items into it using code (not using XML)
Here's the code that I have so far
tweetList = (ListView)this.findViewById(R.id.tweetListView);
TextView tv;
for(int i=0;i<20;i++)
{
tv = new TextView(this);
tv.setText("I'm a textView");
tweetList.addHeaderView(tv);
}
tweetList.invalidate();
What am I doing wrong? The items are not showing in runtime
EDIT: I changed the code as per the answers below and here's the code I have now
tweetList = (ListView)this.findViewById(R.id.tweetListView);
ArrayAdapter<TextView> aa = new ArrayAdapter<TextView>(this, R.id.tweetListView);
tweetList.setAdapter(aa);
TextView tv;
for(int i=0;i<20;i++)
{
tv = new TextView(this);
tv.setText("I'm a textView");
//tweetList.addHeaderView(tv);
aa.add(tv);
}
tweetList.invalidate();
I'm getting an exception now
11-10 01:32:16.002: ERROR/AndroidRuntime(867): android.content.res.Resources$NotFoundException: Resource ID #0x7f050030 type #0x12 is not valid
Why am I not able to add them dynamically now?
You need to use ArrayAdapter and add it to the ListView. Then just add elements to the ArrayAdapter dynamically.
For example:
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1);
tweetList.setAdapter(arrayAdapter);
// ...
arrayAdapter.add("New Item");
The header view is just a header, its not the items in the list. Your listview receives its contents through an Adapter. The ListView does not keep Views for its children, but its the adaptor who creates them and fills them with the appropiate data when they need to be shown at the screen. Search for basic tutorials on how to do this, there are lots out there; and remember adapters are the key.

Categories