如何在TextView中显示ArrayList值?

时间:2019-10-05 00:51:08

标签: java android android-studio

我想在TextView中显示存储在ArrayList中的值,以便在运行应用程序时,该名称与其他详细信息一起出现在TextView中。

我可以从ArrayList中读取值,并将它们显示在logcat中。它们也显示在ListView上,但我无法让它们显示在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);

    }

信息不会显示在TextView中。

1 个答案:

答案 0 :(得分:0)

这是用于通过CustomAdapter从ListView中的arraylist显示名称和国家/地区的国家/地区的完全工作代码。请按照列出的步骤进行操作。 您的MainActivity中已经有Listview lvCountries。

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. 在布局中的res添加object_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

============开始======

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;
}}

============两端=========

  1. 在onCreate方法中的MainActivity.java里面只要写

        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);
    

我已经检查了它,确保对您有帮助。