listview嵌套

试例代码

publicclass ListNestGridView extends BaseAdapter implements

OnItemClickListener {

   

   

       publicstaticfinalintItemHeight = 48;// 每项的高度  

           publicstaticfinalintPaddingLeft = 36;// 每项的高度  

           privateintmyPaddingLeft = 0; 

           private MyGridView toolbarGrid

           private List<Tag> listTag;

       //    private String[] categoryTitles={"租房租凭","二手车/拼车","婚庆/婚介"};

     

 

       private Context parentContext;

 

       private LayoutInflater layoutInflater;

       private  List<Category> listcategory;

        public ListNestGridView(Context context, List<Category> listcategory)

       {

           parentContext=context;

           this.listcategory=listcategory;

      

          

       }

       @Override

       publicvoid onItemClick(AdapterView<?> parent, View view, int position,

              long id)

       {

           Toast.makeText(parentContext, "当前选中的是:" + position, Toast.LENGTH_SHORT)

                  .show();

 

       }

       private TextView categroyTit;

       private GridView gridview;

       privateintcurent=0;

    

       @Override

       publicint getCount() {

           // TODO Auto-generated method stub

           Log.i("listcategorysize", listcategory.size()+"====");

           returnlistcategory.size();

       }

 

       @Override

       public Object getItem(int position) {

           // TODO Auto-generated method stub

           returnlistcategory.get(position);

       }

 

       @Override

       publiclong getItemId(int position) {

           // TODO Auto-generated method stub

           return position;

       }

 

       @Override

       public View getView(int position, View convertView, ViewGroup parent) {

           // TODO Auto-generated method stub

           Log.i("tagList", "=7777=");

            Category category=(Category) getItem(position);

      

            if(convertView!=null){

               position++;

               categroyTit.setText(category.getTitle());

                  /*Log.i("categoryTitles", categoryTitles[position]+"===");*/

                  Log.i("current", position+"===");

                  Log.i("tagList333", "=55==");

                  Log.i("listcategorytags", category.getTags().size()+"==");

                  gridview.setAdapter(new GridViewAdapter(parentContext, category.getTags()));

                  gridview.setOnItemClickListener(this);

            }else{

              convertView=layoutInflater.from(parentContext).inflate(R.layout.gridview, null);

              categroyTit=(TextView) convertView.findViewById(R.id.gridview_category_title);

              gridview=(GridView)convertView.findViewById(R.id.GridView_toolbar);

              Log.i("tagList", "==44= "+category.getTitle());     

                

                  categroyTit.setText(category.getTitle());

              /*  Log.i("categoryTitles", categoryTitles[position]+"===");*/

                  Log.i("current", position+"===");

                  Log.i("tagList333", "=55==");

                  Log.i("listcategorytags", category.getTags().size()+"==");

                  gridview.setAdapter(new GridViewAdapter(parentContext, category.getTags()));

                  gridview.setOnItemClickListener(this);

            }

      

        Log.i("tagList", "==44= really comeback==");   

           return convertView;

       }

       private TextView tv;

       class GridViewAdapter extends BaseAdapter {

            

          private List<Tag> tags;

          private Context context;

          public GridViewAdapter(Context context,List<Tag> tag){

              this.tags=tag;

              this.context=context;

          }

       @Override

       publicint getCount() {

           // TODO Auto-generated method stub

           Log.i("tags", tags.size()+"===");

           returntags.size();

       }

 

       @Override

       public Tag getItem(int position) {

           // TODO Auto-generated method stub

           returntags.get(position);

       }

 

       @Override

       publiclong getItemId(int position) {

           // TODO Auto-generated method stub

           returntags.get(position).getId();

       }

 

       @Override

       public View getView(int position, View convertView, ViewGroup parent) {

           // TODO Auto-generated method stub

           convertView=layoutInflater.from(context).inflate(R.layout.gridview_item, null);

           tv=(TextView) convertView.findViewById(R.id.item_text);

           Tag tag=getItem(position);

           Log.i("tv_name",tag.getName() );

           tv.setText(tag.getName());

           Log.i("tv_name","comeback assignment complete" );

           return convertView;

       }

         

       }

   

      

    }

 

对于listview中嵌套的对象添加item点击事件需要将外面的那个类继承 onitemListener这个接口

在外边的适配器中实现监听方法在这样做的同时会遇到一个问题就是listAdapter本身不是activity 它没有上下文对象所以listAdapteractivity在在同一个.class文件中这样context可以用activity中的监听也可以做到同在一个activity不会出现ui更新等其他问题

 

它的实现远离跟单个适配器是一样的

很多问题都是出在传递数据这方面  所以只要把数据部分整理好传过来实现是没有问题的

值得一提的是通过log文件可以看到  return contentview 他是根据每次匹配得到一个view它就返回一次   但父类的视图只一次  所以不必担心

 

 

在显示gridview中的内容还是会出现很多问题  比如只能显示很少的一部分  滑动的时候对同一个item对象内容会总是在变换

1 显示的长度问题因为listview  gridview都为继承了scrollview 都继承了滑动属性,当两个默认出现两个滑动控件在滑动时里面哪个是默认不响应  但有具有所以应该显示的屏蔽掉。一般的处理方式是将gridview 控件自己重写  重写主要就是重写publicvoid onMeasure(int widthMeasureSpec, int heightMeasureSpec)

    {

       int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >>

              MeasureSpec.AT_MOST);

       expandSpec=expandSpec+15;

       super.onMeasure(widthMeasureSpec, expandSpec);

    }

gridview中的高度设到文本高度这样就可以完整显示了

 

 

2 文字变化

主要用到的是 建一个内部类 将adapter中要显示的控件添加到这个类中  在getview中new这个类  将布局文件中得到的控件赋给新类的成员函数 再将contentview。setTag(新类)

将值赋给类的成员  ,这样子再显示的时候就不会变了

 

试例代码

    @Override

           public View getView(int position, View convertView, ViewGroup parent) {

              // TODO Auto-generated method stub

                holder=new GridHolder();

               convertView=layoutInflater.from(context).inflate(R.layout.gridview_item, null);

               holder.txt_name=(TextView) convertView.findViewById(R.id.item_text);

              Tag tag=getItem(position);

          

             

              convertView.setTag(holder);//holder  添加到动态生成的View里面

               holder.txt_name.setText(tag.getName());

          

              return convertView;

           }

             

            privateclass GridHolder{

                

                    TextView txt_name;

            }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值