2011-12-23 5 views
0

텍스트가 포함 된 각 행과 삭제 버튼이있는 목록보기가 있습니다. 삭제 버튼을 누르면 행을 삭제해야합니다.목록보기에서 항목을 제거하는 동안 안드로이드 문제가 발생했습니다.

기본 어댑터를 사용 중이며 항목이 표시되는 전역 목록이 있습니다.

내가 직면하고

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 코드가 참조하십시오

  1. 내가 firstime에 대한 delet을 누르면, 목록 내의 위치가 정확하고 항목입니다 삭제 및 목록 새로 고침

  2. 새로 고침 된 목록의 행을 다시 클릭하면 getview에 전달 된 해당 위치가 올바르지 않습니다. 따라서 그 위치와 같은 범위를 벗어난 인덱스에 대한 인덱스로 이어지는 것이 목록의 인덱스로 사용됩니다. 내 목록을 확인하고 추가 및 제거시 올바르게 업데이트됩니다. 목록 어댑터에 문제가 있습니다. notifystatechanged 호출로 목록을 새로 고친 후 행을 클릭하면 반환 된 행의 위치가 올바르지 않습니다.

당신은보기 단지 그것을 목록에서 & 호출 방법을 지정된 개체를 제거합니다 adapter.remove(adapter.getItem(position)); 에 의해 객체를 관련 제거 제거 할 필요는 없습니다

답변

1

도와주세요 notifyDatasetChanged()

+0

U 수 PLS 이 "어댑터"가 실제로 무엇을 의미하는지 설명하십시오. 나 같은 기능을 참조하십시오. 기본 어댑터 – png

+0

죄송합니다 preetha 내 실수를 실제로 다시 converview 가져 오는 재사용 & onclicklistener 이전 위치를 잡고 그래서 한 가지 일 태그 위치를 설정하려면 'delete.setTag (position + "") ; & click listener에서 버튼의 해당 태그를 가져오고 converview가 null이 아닌 경우 getview에서 delete를 수행 한 다음 converView에서 삭제 버튼을 추출하고 태그를 다시 설정합니다. –

+0

예, 문제는 converview를 재사용했기 때문입니다. 나는 그것을 재사용하지 않기로 바꿨다. 고마워. – png

관련 문제