2012-07-12 2 views
0

세 개의 테이블이있는 데이터베이스 하나를 만들고 해당 데이터베이스를 자산 폴더에 저장했습니다. 이제 목록보기에서 한 열의 값을 체크 상자로 표시 한 다음 사용자 선택에서 다른 열에 값을 삽입하려고합니다. 그래서 어떻게 할 수 있니?ListView에서 확인란을 사용하고 android의 Sqlite 데이터베이스에 값을 삽입하는 방법

지금까지 내가 한 것은 데이터를 가져 와서 목록에 표시하는 것입니다. 그러나 어떻게 체크 박스를 배치하고 내가 모르는 값을 가져올 수 있습니까? 내가 사용하는 코드는

이하

1.Main 활동

package com.example; 

import android.app.ListActivity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.widget.ListAdapter; 
import android.widget.SimpleCursorAdapter; 

public class MainActivity extends ListActivity { 

    private Cursor employees; 
    private MyDatabase db; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     db = new MyDatabase(this); 
     employees = db.getEmployees(); // you would not typically call this on the main thread 

     ListAdapter adapter = new SimpleCursorAdapter(this, 
       android.R.layout.simple_list_item_1, 
       employees, 
       new String[] {"FullName"}, 
       new int[] {android.R.id.text1}); 

     getListView().setAdapter(adapter); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     employees.close(); 
     db.close(); 
    } 

} 

2.Mydatabase.java

package com.example; 

import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteQueryBuilder; 

import com.readystatesoftware.sqliteasset.SQLiteAssetHelper; 

public class MyDatabase extends SQLiteAssetHelper { 

    private static final String DATABASE_NAME = "northwind"; 
    private static final int DATABASE_VERSION = 2; 

    public MyDatabase(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     //setForcedUpgradeVersion(2); 
    } 

    public Cursor getEmployees() { 

     SQLiteDatabase db = getReadableDatabase(); 
     SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); 

     String [] sqlSelect = {"0 _id", "FullName"}; 
     String sqlTables = "Employees"; 

     qb.setTables(sqlTables); 
     Cursor c = qb.query(db, sqlSelect, null, null, 
       null, null, null); 

     c.moveToFirst(); 
     return c; 

    } 

} 

나는이 작업을 수행 할 수있는 방법 .. 어떤 도움

을 평가해야한다고 저를 제안하십시오
+0

는 listview에 체크 박스를 추가하는 데 문제가 있습니까? – Goofy

+0

마찬가지로 목록 어댑터를 사용한 다음 어떻게 그 안에 확인란을 사용할 수 있으며 선택한 값을 다른 테이블에 삽입하려고합니다. 나는 새 질문이다. 미안하지만 내 질문이 어리석은 짓인지 잘 모르겠다. @Goofy – ADB

+0

그래서 listview ...의 체크 박스를 원한다. – Goofy

답변

2

제 생각에는 ListView에 대한 사용자 지정 어댑터를 만들고 결과 데이터 집합을 수동으로 반복하고 ArrayList<MyObject>을 업데이트해야합니다. lso create).

그런 다음 "선택한"항목을 얻으려면 사용자 지정 어댑터에서 일부 기능을 만들거나 그에 따라 확인란을 변경하는 public void setSelected(int position)과 같은 확인란을 선택할지 여부를 반환하는 private boolean isSelected(int position)과 같은 일부 기능을 만듭니다. 활동에

class MyObject { 
     //properties with setters and getters 
     boolean selected; 
    } 

:

private MyActivity extends Activity { 
    ... 
    ArrayList<MyObject> data = new ArrayList<MyObject>(); 
    ... 
    //get dataset 
    for(int i=0; i<cursor.getCount(); i++) { 
    //create and set MyObject 
    data.add(MyObject); 
    }  
    ... 
    CustomAdapter myAdapter = new CustomAdapter(..., data); 
    listView.setAdapter(myAdapter); 
    ... 
} 

CustomAdapter 클래스에서 :

class CustomAdapter extends BaseAdapter { 
    ArrayList<MyObject> data; 
    //constructor, properties, getters, setters 
    //implement methods 

    public void setSelected(int position) { 
     data.get(position).setSelected(true); //boolean selected property defines whether the checkbox is selected or not 
     notifyDatasetChanged(); //update the UI 
    } 

    @Override 
    getView() { 
     CheckBox checkBox; //the check box of the list row 
     ... 
     if(data.get(position).isSelected()) { 
     checkBox.setSelected(true); 
     } else { 
     checkBox.setSelected(false); 
     } //update the checkbox accordingly 
    } 
} 

내가 쓰고 모든

먼저 우리는 데이터 집합을 유지하기 위해 객체 클래스가 필요 당신에게 개요를주기 위해 아주 짧게 내려갔습니다. 작성해야 할 코드가 많지만 "뜨거운 부분"을 제공하고 있습니다.

+0

예 답변 코드에 – ADB

+0

샘플 코드가 필요합니다. 나는 이것이 당신이 이해하는데 도움이 될 것이라고 생각하지만,이 코드는 복사 - 붙여 넣기를위한 것이 아닙니다. – 10s

+0

그래, 내가보고 이것으로 일하려고 노력할 것이다. 도움을 주셔서 감사합니다 – ADB