가끔은 1000 개 이상의 레코드를 가진 안드로이드 ListView
을 구현 중이다.안드로이드리스트 뷰가 나에게 맞는 위치를 제공하지 않는다.
- 내가 데이터베이스에서 레코드를 가져 오는 오전 :
이 내가 현재하고있는 중이 것입니다.
- 내
ListView
레이아웃에 하나의 버튼이 있습니다. - 버튼 클릭시 자동 증분으로 설정된 데이터베이스 테이블의 기본 키를 표시하고 있습니다.
문제는 :
가 나는 그것이 두 번째 행의 값을 반환 첫 번째 행에 버튼을 클릭 할 때의 내가 10 개 행이 있다고 가정 해 봅시다. 두 번째 목록 버튼을 클릭하면 세 번째 값이 반환됩니다. 목록의 마지막 버튼을 클릭하면 올바른 값을 반환합니다.
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' – Marat
db strat의 인덱스가 0이고 listView의 인덱스가 1에서 시작되었거나 역순으로 표시 되었습니까? –
제품 ID가 모든 2000 레코드 중 하나 일 수 있으므로 데이터베이스에서 필 터링을 적용하고 있기 때문에 prod_id가 순차적이지 않기 때문에 prod_id에 위치를 지정할 수 없습니다 – Bilal