2013-07-13 1 views
0

현재 각 단순 항목에 대해 imagbutton을 사용할 수 있도록 simplecursor 어댑터를 재정의하려고 시도하고 있습니다. 지금까지SimpleCursorAdapter 무시 잘못된 데이터 및 위치가 반환되었습니다.

코드 :

public class MyCursorAdapter extends SimpleCursorAdapter { 
    Cursor mCursor; 
    final int tIndex; 

    final class ViewHolder{ 
     public TextView textView; 
     public ImageButton imageButton; 

    } 

    public MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) { 
     super(context, layout, c, from, to); 
     mCursor = c; 
     tIndex = mCursor.getColumnIndex(DBAdapter.TASK); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if (mCursor.moveToPosition(position)){ 
      ViewHolder viewHolder; 
      final int i = position; 
     if (convertView == null){ 
      LayoutInflater inflater = MainActivity.this.getLayoutInflater(); 
      viewHolder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.listview,parent,false); 
      viewHolder.textView = (TextView)convertView.findViewById(R.id.taskName); 
      viewHolder.imageButton = (ImageButton)convertView.findViewById(R.id.edit_task); 
      viewHolder.imageButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Log.d("LOG_TAG", "It Works: " + i); 
       } 
      }); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder)convertView.getTag(); 

     } 

      String task = mCursor.getString(tIndex); 
      viewHolder.textView.setText(task); 
     } 
     return convertView; 
    } 
} 

나는 데이터베이스의 내용을 표시하고 데이터베이스에 데이터를 추가하기 위해 다른 활동을 사용하는 부모님 활동을 사용합니다. 나는 onResume에서 부모 활동, 사용자가 부모 활동에 반환 보장하기 위해 대체 활동() 마무리() 메서드를 호출 내가 사용 :

사용자가 부모 활동에 반환
@Override 
protected void onResume() { 
    super.onResume(); 
    cursor.moveToFirst(); 
    myCursorAdapter.swapCursor(cursor = db.getAllRows()); 
    list.startLayoutAnimation(); 
    amountTasks(); 
} 

, 내가 찾은 데이터가 잘못 목록보기의 텍스트가 마지막 항목의 중복 것, 보여되며, 위치는 0

될 것 난에 return 문을 변경하는 경우 :

return super.getView(position,convertView,parent) 

텍스트가 올바르게 표시되지만 위치는 여전히 0을 반환합니다.

왜 그런지 알고 싶습니다.

+1

대신 귀하의 제안에 감사드립니다 @pskink – pskink

+0

을 http://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html를 사용 SimpleCursorAdapter을 연장 해달라고, 내가 언급 한의 구현에 보이는 것 function :) –

답변

0

해결 방법은 getview 대신 bindview를 사용하고 구현하는 것이 훨씬 간단합니다. 스튜어트 & pskink에

신용 :

@Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     super.bindView(view, context, cursor); 
     final int i = cursor.getPosition(); 
      ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.imageButton = (ImageButton)view.findViewById(R.id.edit_task); 
      viewHolder.imageButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Log.d("LOG_TAG","Position: "+i); 
       } 
      }); 
    } 

의 getView 재정이 필요하지 않았다. 일반적으로

0

커서를 잠깐 사용하지 않은 경우 getView() 방법에서 moveToPosition()을 사용해야합니까? AFAIK, 당신이 처리해야하는 것은 ViewHolder와 값을 설정하는 것입니다. 커서의 위치를 ​​변경하면 안됩니다.

this question을 보시면 도움이 될 것입니다.

+0

제안을 주셔서 감사합니다. 그러나 이렇게하면 전체 목록 뷰가 데이터베이스의 첫 번째 항목으로 채워지게되므로 언급 방법을 추가 한 것입니다. –

+1

getView() 대신 bindView() 및 newView() 메소드를 사용해 보셨습니까? – Stewart

+0

나는 그 메서드를 oveririding 시도하지 않은, @ bindlink 대신 bindview를 사용하려고 제안, 나는 bindview를 사용하여 작동 시키려고 노력할 것입니다 :) –