텍스트가 포함 된 각 행과 삭제 버튼이있는 목록보기가 있습니다. 삭제 버튼을 누르면 행을 삭제해야합니다.목록보기에서 항목을 제거하는 동안 안드로이드 문제가 발생했습니다.
기본 어댑터를 사용 중이며 항목이 표시되는 전역 목록이 있습니다.
내가 직면하고
public class JobCartListAdapter extends BaseAdapter {
protected LayoutInflater mInflater;
public JobCartListAdapter(Context mContext) {
super();
this.mContext = mContext;
mInflater = LayoutInflater.from(mContext);
}
Context mContext;
@Override
public int getCount() {
// TODO Auto-generated method stub
return JobsManager.JobsCartList.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.job_cart_row, null);
holder = new ViewHolder();
holder.text1 = (TextView) convertView.findViewById(R.id.title);
holder.delete = (ImageButton)convertView.findViewById(R.id.delete);
holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("Remove from" , "" + position);
JobsManager.JobsCartList.remove(position) ;
notifyDataSetChanged();
}
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text1.setText(JobsManager.JobsCartList.get(position).getTitle());
return convertView;
}
static class ViewHolder {
TextView text1;
ImageButton delete;
}
}
문제 아래에있는 내 adpater 코드가 참조하십시오
내가 firstime에 대한 delet을 누르면, 목록 내의 위치가 정확하고 항목입니다 삭제 및 목록 새로 고침
새로 고침 된 목록의 행을 다시 클릭하면 getview에 전달 된 해당 위치가 올바르지 않습니다. 따라서 그 위치와 같은 범위를 벗어난 인덱스에 대한 인덱스로 이어지는 것이 목록의 인덱스로 사용됩니다. 내 목록을 확인하고 추가 및 제거시 올바르게 업데이트됩니다. 목록 어댑터에 문제가 있습니다. notifystatechanged 호출로 목록을 새로 고친 후 행을 클릭하면 반환 된 행의 위치가 올바르지 않습니다.
당신은보기 단지 그것을 목록에서 & 호출 방법을 지정된 개체를 제거합니다 adapter.remove(adapter.getItem(position));
에 의해 객체를 관련 제거 제거 할 필요는 없습니다
U 수 PLS 이 "어댑터"가 실제로 무엇을 의미하는지 설명하십시오. 나 같은 기능을 참조하십시오. 기본 어댑터 – png
죄송합니다 preetha 내 실수를 실제로 다시 converview 가져 오는 재사용 & onclicklistener 이전 위치를 잡고 그래서 한 가지 일 태그 위치를 설정하려면 'delete.setTag (position + "") ; & click listener에서 버튼의 해당 태그를 가져오고 converview가 null이 아닌 경우 getview에서 delete를 수행 한 다음 converView에서 삭제 버튼을 추출하고 태그를 다시 설정합니다. –
예, 문제는 converview를 재사용했기 때문입니다. 나는 그것을 재사용하지 않기로 바꿨다. 고마워. – png