【发布时间】:2016-10-24 15:44:02
【问题描述】:
我正在实现一个 android ListView,它有时有超过 1000 条记录。
这就是我目前正在做的事情:
- 我正在从数据库中获取记录。
- 我的
ListView布局中有一个按钮。 - 单击按钮时,我只是显示我的数据库表的主键,它设置为自动递增。
问题是:
假设我有 10 行,当我点击第一行的按钮时,它会返回第二行的值。当我点击第二个列表按钮时,它返回第三个值。如果我点击列表中的最后一个按钮,它会返回正确的值。
这是我的 listview 适配器代码:
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import info.androidhive.navigationdrawer.R;
import info.androidhive.navigationdrawer.activity.ProductDetailResult;
import info.androidhive.navigationdrawer.other.SharedPreference;
import info.androidhive.navigationdrawer.singloton_classes.ProductResultSingloton;
public class ProductResultListAdaptor extends BaseAdapter {
private Activity activity;
Typeface custom_font;
String mDrawableName;
private LayoutInflater inflater;
private List<ProductResultSingloton> result_items;
int prod_id;
public ProductResultListAdaptor(Activity activity, List<ProductResultSingloton> result_items) {
this.activity = activity;
this.result_items = result_items;
}
@Override
public int getCount() {
return result_items.size();
}
@Override
public Object getItem(int location) {
return result_items.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Viewholder holder;
if (inflater == null) {
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
if (convertView == null) {
convertView = inflater.inflate(R.layout.products_list, null);
holder = new Viewholder();
holder.modal = (TextView) convertView.findViewById(R.id.prod_result_modal);
holder.type = (TextView) convertView.findViewById(R.id.prod_result_type);
holder.observation = (TextView) convertView.findViewById(R.id.prod_result_obeservation);
holder.view_detail = (Button) convertView.findViewById(R.id.show_detail);
holder.view_detail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(activity,Integer.toString(prod_id),Toast.LENGTH_LONG).show();
}
});
convertView.setTag(holder);
}else {
holder = (Viewholder) convertView.getTag();
}
ProductResultSingloton m = result_items.get(position);
prod_id = m.getRow_id(); //Database id is set to singlton class.
holder.modal.setText(m.getCODIGO());
holder.type.setText(m.getTIPO());
holder.observation.setText(m.getOBSERVACIONES());
return convertView;
}
static class Viewholder{
TextView modal;
TextView type;
TextView observation;
Button view_detail;
}
}
感谢任何建议/帮助。我被困在我的项目中间。
提前致谢。
【问题讨论】:
-
试试
prod_id = position -
是不是因为你的dbstrat索引是从0开始的,而listView的索引是从1开始的,还是反了?
-
我无法为 prod_id 分配位置,因为我的 prod_id 不按顺序排列,因为我在数据库中应用过滤,因此产品 ID 可以是所有 2000 条记录中的任何一个
标签: android listview android-adapter listadapter