2012-08-24 8 views
1

이것은 현재 사용중인 어댑터입니다.ListView를 사용하여 SQLite 행 삭제

이것은 날짜를 변환하려고 시도한 것입니다.

+0

몇 가지 방법이 있습니다. (가장 쉬운 것으로 시작할 것입니다.) 행 레이아웃은 어떻게 생겼습니까? – Sam

+0

'long '값을 사용하여 행을 삭제합니다. 첫 번째 게시물에 코드를 추가했습니다. – user1617102

+0

ListView에서 사용하는 XML 레이아웃에 대해 묻고 있는데,이 레이아웃은 무엇입니까? (ListView의 다중 선택 기능을 사용하는 경우, 이것은 _ 간단합니다!) – Sam

답변

0

은 내가 CursorAdapter에 어댑터를 변경 시작했지만 솔직히이 SimpleCursorAdapter 예 (난 당신의 코드를 반영하도록 업데이트 내가 할 수있는 최선의 등.)과 같은 것이다 :

public class Example extends Activity { 
    SimpleCursorAdapter adapter; 
    Database database; 
    ListView listView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     database = new Database(this); 
     database.open(); 

     // See my note below for a detailed explanation of this 
     Cursor cursor = database.getAllNames(); 
     adapter = new SimpleCursorAdapter(this, 
       android.R.layout.simple_list_item_checked, 
       cursor, 
       new String[] { "name" }, // "name" is the column in your database that I describe below 
       new int[] {android.R.id.text1}, 0); 

     listView = (ListView) findViewById(R.id.list); 
     listView.setAdapter(adapter); 
     listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

     Button delete = (Button) findViewById(R.id.delete_button); 
     delete.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       long[] checkedIds = listView.getCheckedItemIds(); 
       for(long id : checkedIds) 
        database.deleteName(id); 

       listView.clearChoices(); 
       adapter.changeCursor(database.getAllNames()); 
      } 
     }); 
    } 

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

좋아, 당신의 필요 이 작업을하기 위해 Database 클래스에 모든 이름 (나는 getAllNames()이라고 불렀다)을 가진 Cursor를 리턴하는 메소드이다.

CREATE TABLE Names (
    _id INTEGER PRIMARY KEY, 
    names TEXT); 

당신은 그에 따라 조정할 수 있습니다 : 지금은 테이블 스키마는 다음과 같이 보입니다 가정. 나는 그 설명 희망

public Cursor getAllNames() { 
    return NameDatabase.rawQuery("SELECT _id, name FROM Names ORDER BY name;", null); 
} 

:

"SELECT _id, name FROM Names;" 

을 아니면 이름이 알파벳 순서하려는 경우 : 귀하의 Database.getAllNames() 방법은 다음과 같이 쿼리를 사용해야합니다

"SELECT _id, name FROM Names ORDER BY name;" 

을 모두 함께처럼 보일 것이다 몇 가지, 솔직히 이것은 당신이 원하는 것을하는 가장 쉬운 방법입니다.


자신의 레이아웃에 추가 자신의 행 (목록 항목) 레이아웃

를 추가하는 것은 간단하다. 당신이 simple_list_item_checked.xml의 모습을 좋아하기 때문에, 현실을 복사 할 레이아웃의와 색상을 위해 그것을 조정할 :

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:checkMark="?android:attr/textCheckMark" 
    android:gravity="center_vertical" 
    android:paddingLeft="6dip" 
    android:paddingRight="6dip" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

추가 할 필요가있다 : 하나 있기 때문에

android:background="#ffffffff" 
    android:textColor="#ff000000" 

(즉 공지 사항 요소는 ViewGroup이 필요없고 LinearLayout도, RelativeLayout도 없다. 또한 "@android:id/text1"은 SimpleCursorAdapter`android.R.id.text1 '에서 참조한 id이며 적절하게 변경해야하는 레이아웃을 변경할 때 사용된다.

그러나 경우에만 색상을 반전하려는 경우 전체 테마로 다른 테마를 사용하는 것이 좋습니다. 매니페스트를 열고이 테마를 추가 : 기본 안드로이드

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Light" > 

이 Theme.Dark를 사용하여, 단순히 Theme.Light로 변경. 이제 모든 항목에는 기본적으로 흰색 배경과 검은 색 텍스트가 있습니다!

어댑터의의 getView에서의 getView 마이너 조정() 나중에 참조 할 수 있도록

,() 당신은 모든 새로운 행에 대해 getLayoutInflater()를 호출합니다. 생성자에서 LayoutInflater를 한 번만 가져 와서 변수에 저장하면됩니다 (LayoutInflater mLayoutInflater). getView()에서 mLayoutInflater.inflate(...)과 함께 사용하면됩니다.

희망 하시겠습니까?

+0

CustomAdapter를 사용하고 있습니다. 나는 그것을 첫 번째 게시물에 추가했다. – user1617102

+0

CursorAdapter와 같은 SQLite ID를 보유하지 않는 ArrayAdapter를 실제로 확장하는 것을 볼 수 있습니다. (이것은 이전에 보았던 것입니다.) CursorAdapter를 확장하기 위해 그것을 변경합시다. ** 또한 ** getView() 및 ViewHolder() _perfectly_를 사용했습니다. (그냥 Upvote.) – Sam

+0

Heya, 지금 삭제하고 ListView 작동합니다. 나에게 SimpleCursorAdapter의 마법을 보여 주셔서 감사합니다. :) 지금은 단지 하나의 작은 문제가 있습니다. CursorAdapter는 표준 레이아웃 (android.R.layout.simple_list_item_checked)을 사용하며 행 레이아웃으로 대체 할 수 없습니다. 나는이 표준이 너무 좋아 보이기 때문에 문제가되지 않는다는 것을 의미합니다. 하지만 텍스트의 색상은 (Alpha = 0) 인 것처럼 보입니다. 클릭 할 때까지는 보이지 않습니다. 그런 다음 텍스트 색상이 검정색이됩니다. 이 문제를 해결하는 방법을 알고 있습니까? – user1617102

관련 문제