问题: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());
}
}
请教万能网友:没有更好的方案?