我正在构建一个包含自定义ButtonAdpater
的视图,该视图会加载StringArray
并输出带有按钮的GridView
。
在按钮离开屏幕之前,一切都很好,但是当我向下滚动时,我只能看到的最后几个按钮是错误的。
public class ButtonAdapter extends BaseAdapter {
private Context context;
private final String[] mobileValues;
public ButtonAdapter(Context context, String[] mobileValues) {
this.context = context;
this.mobileValues = mobileValues;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View gridView;
if (convertView == null) {
gridView = new View(context);
gridView = inflater.inflate(R.layout.button, null);
Button button = (Button) gridView
.findViewById(R.id.button);
button.setText(mobileValues[position]);
Log.d("tag1", "value: " + mobileValues[position] +" position: "+ position);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button b = (Button) v.findViewById(R.id.button);
String mobile = b.getText().toString();
Log.d("tag1", "button: " + mobile);
if (mobile.equals("Bäm 1")){
play(R.raw.bam1);
} else if (mobile.equals("Buz")){
play(R.raw.buz);
} else if (mobile.equals("Bäm 2")){
play(R.raw.bam2);
} else if (mobile.equals("Wir nehmen das Geld")){
play(R.raw.gold2);
}
}
});
} else {
gridView = (View) convertView;
}
return gridView;
}
@Override
public int getCount() {
return mobileValues.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
}
目前我传入一个包含26个项目的字符串数组。当谈到要绘制的第20个按钮时,position
会下降到0
,而按钮会显示错误的文本。
我不知道如何解决这个问题,任何人都可以帮助我吗?
谢谢 - 格雷维乌斯
答案 0 :(得分:1)
您的代码存在的问题是您没有为屏幕外的视图设置测试。正确的代码应该是这样的
public class ButtonAdapter extends BaseAdapter {
private Context context;
private final String[] mobileValues;
private View.OnClickListener onClListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Button b = (Button) v.findViewById(R.id.button);
String mobile = b.getText().toString();
Log.d("tag1", "button: " + mobile);
if (mobile.equals("Bäm 1")){
play(R.raw.bam1);
} else if (mobile.equals("Buz")){
play(R.raw.buz);
} else if (mobile.equals("Bäm 2")){
play(R.raw.bam2);
} else if (mobile.equals("Wir nehmen das Geld")){
play(R.raw.gold2);
}
}
};
public ButtonAdapter(Context context, String[] mobileValues) {
this.context = context;
this.mobileValues = mobileValues;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.button, parent, false);
}
Button button = (Button) convertView
.findViewById(R.id.button);
button.setText(mobileValues[position]);
button.setOnClickListener(onClListener);
return convertView;
}
@Override
public int getCount() {
return mobileValues != null ? mobileValues.length : 0;
}
@Override
public Object getItem(int position) {
return mobileValues[position];
}
@Override
public long getItemId(int position) {
return position;
}
}