gpt4 book ai didi

android - 自定义 SimpleCursorAdapter 和 BindView(按钮随机不可见)

转载 作者:行者123 更新时间:2023-11-29 01:30:12 27 4
gpt4 key购买 nike

我制作了自定义的 SimpleCursorAdapter,这样当没有电话号码时我可以单击 ListView 中的按钮(按钮需要调用某人)我希望按钮不可见,起初我的代码正确显示所有内容但是当我向上滚动并向下几次按钮随机变得不可见。

已编辑:当所有这些都可见时没问题,但是当一个(ListView 上项目内的按钮)变得不可见时,它们开始随机变得不可见。

我的代码:

 public MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, double lat, double lon) {
super(context, layout, c, from, to);
latC = lat;
lonC = lon;
}

public MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.list_view_place_list, parent, false);
return view;
}

@Override
public void bindView(final View view,final Context context,final Cursor cursor) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);

String name = cursor.getString(cursor.getColumnIndex(PlacesDB.PLACE_NAME));
String address = cursor.getString(cursor.getColumnIndex(PlacesDB.PLACE_ADDRESS));
double lat = cursor.getDouble(cursor.getColumnIndex(PlacesDB.PLACE_LAT));
double lon = cursor.getDouble(cursor.getColumnIndex(PlacesDB.PLACE_LON));
final String phone = cursor.getString(cursor.getColumnIndex(PlacesDB.PLACE_PHONE));

TextView txtName = (TextView) view.findViewById(R.id.txtName);
TextView txtAddress = (TextView) view.findViewById(R.id.txtAddress);
TextView txtDistance = (TextView) view.findViewById(R.id.txtDistance);

txtName.setText(name);
txtAddress.setText(address);

Button btnCall = (Button) view.findViewById(R.id.btnCall);
if (latC != -1) {
double dis = getDistanceFromLatLonInKm(latC, lonC, lat, lon);
if (settings.getString("mk", "km").equals("miles")) {
dis = dis / 1.621371;
txtDistance.setText(String.format("%.3f", dis) + " Miles");
}
else
txtDistance.setText(String.format("%.3f", dis) + " Km");
} else {
txtDistance.setText("Distance not available");
}
if (phone == null){
btnCall.setVisibility(View.INVISIBLE);
}
else {
view.findViewById(R.id.btnCall).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String tel;
Intent dialIntent = new Intent();
tel = phone.replace("-", "");
dialIntent.setAction(Intent.ACTION_CALL);
dialIntent.setData(Uri.parse("tel:" + tel));
context.startActivity(dialIntent);
}
});
}
}

最佳答案

由于 android 尝试回收未使用的 ListView 项目,因此您始终必须设置所有 gui 元素

if (phone == null){
btnCall.setVisibility(View.INVISIBLE);
}

只使 btnCall 不可见,但没有代码使回收的不可见 listview-item-btnCall 再次可见。

if (phone == null){
btnCall.setVisibility(View.INVISIBLE);
} else {
btnCall.setVisibility(View.VISIBLE);
}

应该完成这项工作。

出于同样的原因,view.findViewById(R.id.btnCall).setOnClickListener(...) 的代码应该在 newView() 中执行,所以只添加一次。

关于android - 自定义 SimpleCursorAdapter 和 BindView(按钮随机不可见),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31654366/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com