1

I want to display a value stored in my ArrayList in my TextView so when the application is run the name appears in the TextView alongside other details.

I can read the values from the ArrayList and they display in the logcat. They also display on a ListView but I cant get them to display on the TextView.

private ArrayList<Country> countries; private ArrayList<Country> countries; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvCountries = findViewById(R.id.main_activity_lv_countries); tvDetails = findViewById(R.id.activity_country_details); lvCountries.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //create an intent for the FlagDisplayActivity Intent intentBundle = new Intent(MainActivity.this, FlagDisplayActivity.class); Bundle bundleName = new Bundle(); //put arg2 as an extra in the intent. arg2 represents the item clicked on //e.g arg2 will be 0 if the first item was clicked intentBundle.putExtra(countries.get(position).getName(), countries.get(position).getFlagImageResourceId()); //start the activity startActivityForResult(intentBundle, DELETE_REQUEST); } }); countries = new ArrayList<>(); countries.add(new Country("Australia", 100, "Canberra", "English", "Dollars", R.drawable.australia)); countries.add(new Country("China", 5771876, "Beijing", "Chinese", "Renminbi", R.drawable.china)); countries.add(new Country("Germany", 126860301, "Berlin", "German", "Euros", R.drawable.germany)); countries.add(new Country("India", 60550075, "New Delhi", "Indian", "Rupees", R.drawable.india)); countries.add(new Country("UK", 100, "London", "English", "GBP", R.drawable.uk)); for (int i = 0; i < countries.size(); i++) { Log.d(TAG, "onCreate: name: " + countries.get(i).getName() + " Population: " + countries.get(i).getPopulation()); } //Create a String ArrayList to store the country names ArrayList<String> countryNames = new ArrayList<>(); //For every Country object in the countries ArrayList for (Country country : countries) { //Add the name of the country to the String ArrayList countryNames.add(country.getName() + " " + country.getPopulation() + " " + country.getCapitalCity() + " " + country.getLanguage() + " " + country.getCurrency() + " " + country.getFlagImageResourceId()); } //Create an ArrayAdapter using the countryNames String ArrayList ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, countryNames); //Set the adapter on the ListView lvCountries.setAdapter(adapter); } 

Information does not display in the TextView.

1 Answer 1

1

here it is completely working code for display name and population of countries from arraylist in ListView by CustomAdapter. follow steps as listed. Already Listview lvCountries in your MainActivity.

1.Country.java

public class Country { String name;int population; String capital,language,currentcy; int image; public Country(String name, int population, String capital, String language, String currentcy, int image) { this.name = name; this.population = population; this.capital = capital; this.language = language; this.currentcy = currentcy; this.image = image; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPopulation() { return population; } public void setPopulation(int population) { this.population = population; } public String getCapital() { return capital; } public void setCapital(String capital) { this.capital = capital; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } public String getCurrentcy() { return currentcy; } public void setCurrentcy(String currentcy) { this.currentcy = currentcy; } public int getImage() { return image; } public void setImage(int image) { this.image = image; } } 
  1. in res in layout add entity_country.xml

    <TextView android:id="@+id/lit_item_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15sp" android:textColor="#000" /> <TextView android:id="@+id/lit_item_population" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15sp" android:textColor="#89a"/> <TextView android:id="@+id/lit_item_capital" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15sp" android:textColor="#f00"/> <TextView android:id="@+id/lit_item_language" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15sp" android:textColor="#7788ff"/> <TextView android:id="@+id/lit_item_currency" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15sp" android:textColor="#007700"/> 

  1. CustomAdapter.java

============ starts ======

class CustomAdapter extends BaseAdapter { private ArrayList<Country> _data; Context _c; CustomAdapter(ArrayList<Country> data, Context c) { _data = data; _c = c; Log.d("inside customAdapter", "inside customAdapter constructor..."); } public int getCount() { // TODO Auto-generated method stub return _data.size(); } public Object getItem(int position) { // TODO Auto-generated method stub return _data.get(position); } public long getItemId(int position) { // TODO Auto-generated method stub return position; } public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater) _c .getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.entity_country, null); } TextView lit_item_name = (TextView) v.findViewById(R.id.lit_item_name); TextView lit_item_population = (TextView) v.findViewById(R.id.lit_item_population); TextView lit_item_capital = (TextView) v.findViewById(R.id.lit_item_capital); TextView lit_item_language = (TextView) v.findViewById(R.id.lit_item_language); TextView lit_item_currency = (TextView) v.findViewById(R.id.lit_item_currency); ImageView list_item_image = (ImageView) v.findViewById(R.id.list_item_image); Log.d("tvcredit==>", " "+lit_item_name.getText().toString()); final Country tpj = _data.get(position); lit_item_name.setText(tpj.name+""); lit_item_population.setText(tpj.population+""); lit_item_capital.setText(tpj.capital+""); lit_item_language.setText(tpj.language+""); lit_item_currency.setText(tpj.currentcy+""); list_item_image.setImageResource(tpj.image); LinearLayout ll_parent=(LinearLayout)v.findViewById(R.id.ll_parent); ll_parent.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(_c,tpj.name+"\n"+tpj.capital,Toast.LENGTH_LONG).show(); //======== code as per your requirement ========= //Intent intent=new Intent(_c,TargetActivity.class); //intent.putExtra("name",tpj.name+""); //intent.putExtra("name",tpj.capital+""); //_c.startActivity(intent); } }); return v; }} 

============ ends =========

  1. inside MainActivity.java in onCreate Method just write

     ListView lvCountries = (ListView)findViewById(R.id.lvCountries); ArrayList<Country> countries; countries = new ArrayList<>(); countries.add(new Country("Australia", 100, "Canberra", "English", "Dollars", R.drawable.australia)); countries.add(new Country("China", 5771876, "Beijing", "Chinese", "Renminbi", R.drawable.china)); countries.add(new Country("Germany", 126860301, "Berlin", "German", "Euros", R.drawable.germany)); countries.add(new Country("India", 60550075, "New Delhi", "Indian", "Rupees", R.drawable.india)); countries.add(new Country("UK", 100, "London", "English", "GBP", R.drawable.uk)); CustomAdapter customAdapter=new CustomAdapter(countries,getApplicationContext()); lvCountries.setAdapter(customAdapter); 

i have checked it, sure it will be helpful for you.

Sign up to request clarification or add additional context in comments.

10 Comments

The application just throws an error upon launch saying that theres something wrong with the following line: tvDetails.setText(displayvalue+""); Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
Did you get the view id right for the textview with findViewById?
just declared, String displayvalue=""; before for loop, i run in mobile handset, send working code after run app.
I ran it in another application and it ran fine i might have to change something in another class. Thanks. I do have a list view which shows before the text view then when selecting an item in the list view the text view should appear.
welcome RJASSI, i go through your code, i think better to implement CustomBaseAdapter in listview.
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.