首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组索引输出边界异常ArrayList customListView

数组索引输出边界异常ArrayList customListView
EN

Stack Overflow用户
提问于 2013-02-24 11:16:18
回答 2查看 236关注 0票数 0

我有一个关于我的安卓customListview的问题。我正在尝试使用onclick事件(tv.setOnClickListener)在列表中动态添加内容,我有我的客户国家类,其中我使用geter和seter方法存储数据。问题:当我动态添加新内容并向下滚动到列表末尾时,我得到Arrayindexoutofboundexception

请帮助

代码语言:javascript
复制
 public class PosterList extends Activity 
   {

 MyCustomAdapter dataAdapter = null;
ArrayList<Country> countryList = new ArrayList<Country>();

TextView tv;

@Override
public 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(this,R.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;
 }

@Override
public 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;

  }
   }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-24 11:22:47

我看到了问题所在。在您的getView方法中,引用了countryList。您有两个countryList变量:一个在PostList类中,另一个在MyCustomAdapter类中。您引用的是MyCustomerAdapter类中的数据,它是,而不是适配器支持的数据。在getView方法中以这种方式获取Country对象:

代码语言:javascript
复制
Country country = (Country) getItem(position);
票数 1
EN

Stack Overflow用户

发布于 2013-02-24 11:27:30

它就是你的for循环。您必须在添加信息之前对其进行初始化,初始化它,然后在dynamically.mso循环中使用类方法添加该信息。应该能解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15048269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档