问题描述
- Arrayindexoutofboundsexception 异常
- 这个问题是关于android中customListview 的。我想使用onclick事件(tv.setOnClickListener)在list中动态的添加内容。我有自定义的country类使用geter and seter 方法来储存数据。当我动态的添加新的内容,然后滚动到list的底部时,获取 Arrayindexoutofboundexception 异常。
public class PosterList extends Activity { MyCustomAdapter dataAdapter = null;ArrayList<Country> countryList = new ArrayList<Country>();TextView tv;@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.posterlist); //Click on textview to add element in contrylist tv = (TextView) findViewById(R.id.myFilter); tv.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Country country = new Country(""df""df""df""m""); countryList.add(country); dataAdapter.notifyDataSetChanged(); } }); displayListView();}private void displayListView() { //Parse my JSON and store it in to different arrays for(int k=0;k<len;k++) { Country country = new Country(subcategory[k]caseid[k]time[k]newpost[k]); countryList.add(country); } dataAdapter = new MyCustomAdapter(thisR.layout.country_info countryList); ListView listView = (ListView) findViewById(R.id.listView1); listView.setAdapter(dataAdapter); listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent View view int position long id) { Country country = (Country) parent.getItemAtPosition(position); Toast.makeText(getApplicationContext() country.getContinent() Toast.LENGTH_SHORT).show(); } });}private class MyCustomAdapter extends ArrayAdapter<Country> { private ArrayList<Country> originalList; private ArrayList<Country> countryList; public MyCustomAdapter(Context context int textViewResourceId ArrayList<Country> countryList) { super(context textViewResourceId countryList); this.countryList = new ArrayList<Country>(); this.countryList.addAll(countryList); this.originalList = new ArrayList<Country>(); this.originalList.addAll(countryList);}private class ViewHolder { TextView code; TextView name; TextView continent; TextView region; }@Overridepublic View getView(int position View convertView ViewGroup parent) { ViewHolder holder = null; Log.v(""ConvertView"" String.valueOf(position)); if (convertView == null) { LayoutInflater vi = (LayoutInflater)getSystemService( Context.LAYOUT_INFLATER_SERVICE); convertView = vi.inflate(R.layout.country_info null); holder = new ViewHolder(); holder.code = (TextView) convertView.findViewById(R.id.code); holder.name = (TextView) convertView.findViewById(R.id.name); holder.continent = (TextView) convertView.findViewById(R.id.continent); holder.region = (TextView) convertView.findViewById(R.id.region); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } Country country = countryList.get(position); holder.code.setText(country.getCode()); holder.name.setText(country.getName()); holder.continent.setText(country.getContinent()); holder.region.setText(country.getRegion()); return convertView; } }}
解决方案
在你的 getView 方法中,你提到 countryList,有两个 countryList 变量:一个是在 PostList 类中,一个是在 MyCustomAdapter 类中。你提及到的那个是在 MyCustomerAdapter 类中,没有适配器支持数据。在 getView 方法获取 Country 对象:
Country country = (Country) getItem(position);
解决方案二:
holder = (ViewHolder) convertView.getTag(); } Country country = countryList.get(position); holder.code.setText(country.getCode()); holder.name.setText(country.getName()); holder.continent.setText(country.getContinent()); holder.region.setText(country.getRegion()); return convertView; } }}
android
解决方案三:
if(position <= countryList.size()){ Country country = countryList.get(position); holder.code.setText(country.getCode()); holder.name.setText(country.getName()); holder.continent.setText(country.getContinent()); holder.region.setText(country.getRegion()); return convertView;}return null ;
时间: 2025-01-17 15:21:00