2014-05-22 3 views
0

커서가 목록보기를 채우는 어댑터가 있는데 제대로 작동합니다. onLongItemClickListener 인 항목을 제거하고 싶습니다. 이 코드를 작성했지만 데이터베이스 행 ID가 무엇인지 알지 못하기 때문에 잘못되었음을 알고 있습니다.android- 데이터베이스에서 항목을 제거 할 수 없습니다 onLongItemClickListener listview

 lv.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, final View view,final int position, long id) { 

      builder= new AlertDialog.Builder(MainActivity.this); 
      builder.setMessage(R.string.deleteit) 
        .setCancelable(true) 
        .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          // myDb.deleteRow(position); 
         } 
        }); 
      AlertDialog alert = builder.create(); 
      alert.show(); 
      return false; 
     } 

    }); 

나는 각 행이 -1을 반환를 들어, onItemLongClick (id)에서 세 번째 항목을 기록.

이 당신이 나를 도울 수 내 목록보기 채우는 방법

cursor = myDb.getAllRows(); 
adapter_comments = new TimeListAdapter(MainActivity.this, cursor); 
lv.setAdapter(adapter_comments); 

이 내 cursorAdapter

public class TimeListAdapter extends CursorAdapter { 
    public TimeListAdapter(Context context, Cursor c) { 
     super(context, c); 
    } 

    public class ViewHolder { 
     TextView tvTitle; 
     TextView tvt9; 

     public ViewHolder(View row) { 
      tvTitle = (TextView) row.findViewById(R.id.title); 
      tvt9 = (TextView) row.findViewById(R.id.textView9); 

     } 
    } 

    @Override 
    public View newView(Context context, Cursor arg1, ViewGroup arg2) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row = inflater.inflate(R.layout.spots_custom_listview, arg2,false); 
     ViewHolder holder = new ViewHolder(row); 
     row.setTag(holder); 
     return row; 
    } 

    @Override 
    public void bindView(View v, Context context, Cursor c) { 
     ViewHolder holder = (ViewHolder) v.getTag(); 
     holder.tvTitle.setText(c.getString(5)); 
     holder.tvt9.setText(c.getString(4)); 

    } 
} 

이다?

+0

오류 게시 logcat –

+0

@PratikButani 오류가 없습니다.이 목록의 데이터베이스에서 행을 삭제하는 방법을 모르겠습니다. – user3657105

+0

나는 아래에서 대답했다. –

답변

-1

onItemLongClick의 세 번째 매개 변수는 BaseColumns._ID 값입니다.

이제는 -1이 반환된다고 말하면 목록이나 어댑터에 문제가있는 것입니다.

cursorAdapter로 전달하는 커서에 투영의 일부로 _ID 열이 포함되지 않았을 수 있습니다.

cursorAdapter를 만들 코드를 게시 할 수 있습니까?

+0

답장을 보내 주셔서 감사합니다. cursorAdapter 클래스를 첨부합니다. 커서에 데이터베이스의 _id가 있는지 확인합니다. – user3657105

+0

대답이 아닌 경우 왜 받아 들였습니까? –

+0

여기서 커서 어댑터를 확장 할 이유가 없습니다. 정상적인 커서 어댑터를 사용하면 메서드를 재정의하고 super를 호출하지 않으면 예기치 않은 결과가 발생할 수 있으므로 문제의 원인 일 수 있습니다. – shalafi

0

이 시도 :

public void onClick(DialogInterface dialog, int id) { 
    // First you have to get cursor using position 
    Cursor cursor = (Cursor) lv.getItemAtPosition(position); 

    //Now you can get id using column name of ROW_ID 
    int id = cursor.getInt(cursor.getColumnIndex("your_row_id_column_name")); 

    //Now delete you row 
    myDb.deleteRow(id); 
} 

이 의심하는 경우 핑 주시기 바랍니다.

관련 문제