問題: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());
}
}
請教萬能網友:沒有更好的方案?