1

내 코드는 여기에 표시됩니다. .............! 목록보기에서 삭제 된 행이있을 때 listview 행의 인덱스는 변경되지만 데이터베이스의 기본 키 id는 변경되지 않습니다. 이제 항목을 클릭하고 listview의 클릭 된 항목의 위치를 ​​새 활동으로 전달합니다. 그리고 나에게 무언가를 돌려 보내지 않는 ID로 레코드를 가져 오려고 시도하거나 잘못된 데이터가 반환됩니다. 이제 내 질문에 어떻게 데이터베이스에서 listview 클릭 한 항목의 행 ID 검색 할 수 있습니다. 이제 데이터베이스에서 올바른 행을 검색하기 위해 onItemclick 메소드 내부의 코드를 작성해야합니다.목록보기에서 항목을 클릭하면 sqlite 데이터베이스에서 테이블의 행 ID를 어떻게 얻을 수 있습니까?

고마워요 .......

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    myDb = new DBHelper(this); 
    titles = myDb.getAllNames(); 
    times = myDb.getAllTimes(); 

    ArrayAdapter<String> ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, titles); 
    lv = (ListView) findViewById(R.id.listView1); 
    lv.setAdapter(ad); 

    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) 
     { 

     } 
    }); 



} 
+2

커서의 개념을 사용해야합니다. 이 –

+0

덕분에 @HanishSharma –

답변

1

먼저 쿼리를 작성하고 데이터베이스에서 ID를 검색해야합니다. 커서의 ID를 반환해야합니다. 자바 페이지에서 다음

public Cursor fetchAllNames() { 

     Cursor mCursor = app.myDbHelper.MyDB().query("cardlist", new String[] {"cardid as _id","cardname","carddesc"}, 
       null, null, null, null, null); 
     try{ 

      if (mCursor != null) { 
       mCursor.moveToFirst(); 
      } 
      return mCursor; 
     }catch(Exception e) 
     { 
      return mCursor; 
     } 

    } 

:

는 아래의 코드를 참조하십시오

Cursor cursor = myDB.fetchAllNames(); 

는 그런 다음하여 데이터베이스 ID를 얻을 수 있습니다 :

lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) 
     { 
     if(cursor!=null){ 
        System.out.println("position===>"+position); 
        if(cursor.moveToFirst()){ 
         cursor.moveToPosition(position); 
         String cardid = cursor.getString(cursor.getColumnIndex("_id")); 

        } 
       } 
     } 
    }); 

를 당신은 얻을 것이다 cardid 문자열에있는 데이터베이스 ID. SimpleCursorAdapter를 사용하는 경우 _id을 사용해야합니다. 그렇지 않으면 _id를 sqlite 데이터베이스의 사용자 ID를 나타내는 열 이름으로 대체해야합니다.

1

이렇게 쉬운 방법이 있습니다. 먼저 데이터베이스에서 한 줄을 나타내는 개체를 만듭니다. 데이터베이스에 포함 된 것이 무엇인지 모르기 때문에 "제목"이라고 부릅니다.

public class Title { 
    private long id; 
    private String title; 
    // Constructor, setters and getters 
} 

그런 다음 사용자 지정 어댑터를 만듭니다. 항목을 클릭하면 가져올 수있는 제목 모음을 저장합니다.

public class TitlesAdapter extends ArrayAdapter<Title> { 
    private Context context; 
    private List<Title> items; 

    public TitlesAdapter(Context context, List<Title> items) { 
     super(context, R.layout.row_draweritem, items); 

     this.context = context; 
     this.items = items; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { /* ... */ } 
} 

당신은 쉽게 활동에 어댑터를 설정할 수 있습니다 당신이 당신의 데이터베이스에 행 ID를 다시 얻을 수 있도록

this.titlesAdapter = new TitlesAdapter(context, titles); 
listView.setAdapter(this.titlesAdapter); 

... 당신의 onItemClickListener를 정의

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     long id = titlesAdapter.getItems().get(i).getId(); 
    } 
}); 

이 기사에서 맞춤 어댑터에 대해 자세히 알아볼 수 있습니다 : http://www.vogella.com/tutorials/AndroidListView/article.html

+0

@chteuchteu 개념을 참조 주셔서 감사합니다 –

+0

오신 것을 환영합니다! 이렇게하면 데이터베이스를 쿼리하기 전에 제목에 대한 정보를 얻을 수 있습니다 (성능이 좋음). – chteuchteu