2014-08-29 90 views
0

我遇到了BaseAdapter问题。我正在使用Gridview来显示我的内容。我需要添加一些空白区域。 但是,如果我上下滚动blankfields随机移动。Android Baseadapter固定的空白区域

我的问题是:我如何让他们留在正确的位置?

public class GridviewAdapter extends BaseAdapter { 
private ArrayList<String> sign; 
private ArrayList<String> roman; 
private ArrayList<String> check; 
private Activity activity; 
private int minusValue=0; 
private boolean fulllist; 


public GridviewAdapter(Activity activity, ArrayList<String> sign,ArrayList<String> roman,ArrayList<String> check,boolean fulllist) { 
    super(); 
    this.activity=activity; 
    this.sign=sign; 
    this.roman=roman; 
    this.check=check; 
    this.fulllist=fulllist; 
} 
@Override 
public int getCount() { 
    if(fulllist) 
    { 
     return sign.size()+5; 
    } 
    else 
    { 
     return sign.size(); 
    } 
} 
public void updateList(ArrayList<String> newcheck) { 
    check.clear(); 
    check.addAll(newcheck); 
    this.notifyDataSetChanged(); 
} 
@Override 
public Object getItem(int position) { 
return sign.get(position); 
} 
@Override 
public long getItemId(int position) { 
return position; 
} 
public static class ViewHolder 
{ 
    public TextView signv; 
    public TextView romanv; 
    public TextView checkv; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder view= new ViewHolder(); 
    LayoutInflater inflator = activity.getLayoutInflater(); 
     if (convertView == null) { 
      view = new ViewHolder(); 
      convertView = inflator.inflate(R.layout.gridblock, null); 
      view.signv = (TextView) convertView.findViewById(R.id.sign); 
      view.checkv = (TextView) convertView.findViewById(R.id.check); 
      view.romanv = (TextView) convertView.findViewById(R.id.roman); 

      convertView.setTag(view); 
     } else { 
      view = (ViewHolder) convertView.getTag(); 
     } 
     if(position==36) { 
      convertView.setVisibility(View.GONE); 
      convertView.setClickable(false); 
      convertView.setEnabled(false); 
      minusValue=minusValue-1; 
     } 
     else if(position==38) { 
      convertView.setVisibility(View.GONE); 
      convertView.setClickable(false); 
      convertView.setEnabled(false); 
      minusValue=minusValue-1; 
     } 
     else if(position==46) { 
      convertView.setVisibility(View.GONE); 
      convertView.setClickable(false); 
      convertView.setEnabled(false); 
      minusValue=minusValue-1; 
     } 
     else if(position==47) { 
      convertView.setVisibility(View.GONE); 
      convertView.setClickable(false); 
      convertView.setEnabled(false); 
      minusValue=minusValue-1; 
     } 
     else if(position==48) { 
      convertView.setVisibility(View.GONE); 
      convertView.setClickable(false); 
      convertView.setEnabled(false); 
      minusValue=minusValue-1; 
     } 
     else 
     { 
      view.signv.setText(sign.get(0)); 
      view.checkv.setText(check.get(0)); 
      if(view.checkv.getText().equals("✘")) 
      { 
       view.checkv.setTextColor(Color.RED); 
      } 
      else 
      { 
       view.checkv.setTextColor(Color.GREEN); 
      } 
      view.romanv.setText(roman.get(0)); 
     } 

     return convertView; 
} 
+1

使用INVISIBLE而不是GONE作为空白。 – 2014-08-29 09:48:33

+0

没有解决我的问题:)但谢谢 – demon2005 2014-08-29 10:06:27

回答

0

在else子句,更新所有ViewHolder字段时,您需要撤消申请的空白位置隐蔽。例如:

convertView.setVisibility(View.VISIBLE); 
convertView.setClickable(true); 
convertView.setEnabled(true); 

这是因为再循环视图不能保证与最初充气时的位置相同。意思是用于位置47的视图可以重复用于位置2.

我不确定你在用minusValue做什么,但您可能也需要调整它。请记住,getView()可以并且将被称为每个位置编号3-4次。只是使用该变量时的参考。

+0

谢谢你,这对我工作! 我知道我必须调整minusValue ...我删除了一些功能,因为我试图解决移动空白地带的问题 谢谢! – demon2005 2014-08-30 15:12:43