gridview position =0多次调用getView, 如果有异步加载,那会导致程序效率低,并且导致position=0的控件显示有问题

问题:gridview  position =0多次调用getView, 如果有异步加载,那会导致程序效率低,并且导致position=0的控件显示有问题。

查找了些资料,大概是因为gridview需要计算每个item的size导致,具体的如何调用原理我还不太了解

解决:很多说设置gridview布局以及父布局的width和height为fill_parent,或者指定大小,但是我都试过了,不行,版本android 4.4.4;

 

后来找到一个方法:记录下:

/**
 * A placeholder fragment containing a simple view.
 */
public class MainActivityFragment extends Fragment {
    List<String> items = new ArrayList<>();
    GridView mGridView ;
    boolean isFirst = true ;
    class CustomAdapter extends BaseAdapter{


        @Override
        public int getCount() {
            return items.size();
        }

        @Override
        public Object getItem(int position) {
            return items.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
           // Log.d("MainFragment", "parent.getChildCount = " + parent.getChildCount());
            TextView tvItem = null;
            if(convertView == null){
                convertView = LayoutInflater.from(getActivity()).inflate(R.layout.layout_grid_view_item,null);
                tvItem = (TextView) convertView.findViewById(R.id.tvItem);
                convertView.setTag(tvItem);
               // Log.d("MainFragment", "convertView null , pos = " + position);
            }else{
                tvItem = (TextView) convertView.getTag();
            }

           // Log.d("MainFragment","ChildCount = " + parent.getChildCount() + ",position = " + position+ " , posCnt = " + posCnt);

            if((position == 0 && isFirst) || position >0){
                if(position == items.size() -1){
                    tvItem.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            if(items.size() == 1){
                                items.add(0,"1");
                            }else
                                items.add(items.size()-1,String.valueOf(items.size()));
                            isFirst = true;
                            notifyDataSetChanged();
                        }
                    });
                    tvItem.setText("");
                    tvItem.setBackgroundDrawable(new BitmapDrawable(BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_menu_add)));
                }else{
                    tvItem.setText(items.get(position));
                    tvItem.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                }

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d("MainFragment", "pos = " + position + " , current thread id = " + Thread.currentThread().getId());
                    }
                }).start();
            }else{

            }
            //第一次创建gridview的时候
            if(position == 0 && 0 == parent.getChildCount()&& isFirst){
                isFirst  = false ;
            }else if(position == 0 && parent.getChildCount() > 0 && isFirst){
                //来自刷新页面的情况,gridview已经创建的情况
                isFirst = false;
            }
            return convertView;
        }
    }
    public MainActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main, container, false);
        mGridView = (GridView) view.findViewById(R.id.gridview);
        return view ;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        items.add("1");
        items.add("0");
        mGridView.setAdapter(new CustomAdapter());

    }
}


请教万能网友:没有更好的方案?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值