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

    }
}


請教萬能網友:沒有更好的方案?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章