2013-01-03 25 views
1

我已經在SQLiteOpenHelper類中創建了數據庫。我也在Button click事件中的其他活動(InsertActivity.java)中插入數據庫。現在,當我在列表視圖上顯示數據時,會生成兩個相同的條目。如何在listview中顯示不同的記錄?如何在android中使用sqlite數據庫顯示獨特的數據?

ListActivity.java

public class ListActivity extends Activity { 
    ListView lv; 
    ArrayList<String> items = new ArrayList<String>(); 
    ArrayList<String> items_id = new ArrayList<String>(); 
    dbhelper dh; 
    SQLiteDatabase db; 
    int index_id; 
    Button btn; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list); 
     Button btn; 
     btn = (Button)findViewById(R.id.newProjectlist); 
     btn.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 


        Intent intent= new Intent(ListActivity.this,NewProject.class); 
       startActivity(intent); 
      } 
     }); 
     lv = (ListView)findViewById(R.id.projectListView); 
     setUpList(); 
     dh = new dbhelper(this); 

     Cursor c = getAllData(); 
     showAllData(c); 
     registerForContextMenu(lv);  
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     // TODO Auto-generated method stub 
     super.onCreateContextMenu(menu, v, menuInfo); 

     if(v.getId() == R.id.projectList){ 
      menu.setHeaderIcon(R.drawable.ic_launcher); 
      menu.setHeaderTitle("Record List"); 
      menu.add(0,1,menu.NONE,"Delete Record"); 
      menu.add(0,2,menu.NONE,"Show Record"); 
     } 
    } 

    @Override 
public boolean onContextItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 
     int itemId = item.getItemId(); 
     if(itemId == 1) 
     { 
      AdapterView.AdapterContextMenuInfo menuinfo = (AdapterContextMenuInfo) item.getMenuInfo(); 
      int poistion = menuinfo.position; 
      String id_string = items_id.get(poistion); 
      long id = Long.valueOf(id_string); 

      //menuinfo = (AdapterContextMenuInfo) item.getMenuInfo(); 
      //index_id = menuinfo.position; 
      deleteUserData(index_id); 
      items_id.remove(poistion); 
     } 
     if(itemId == 2){ 
      AdapterView.AdapterContextMenuInfo menuinfo; 
      menuinfo = (AdapterContextMenuInfo) item.getMenuInfo(); 
      index_id = menuinfo.position; 
      editUserData(index_id); 
     } 
    return super.onContextItemSelected(item); 
} 

    private void editUserData(int indexid) { 
     // TODO Auto-generated method stub 
     String user_id = items_id.get(indexid); 
     Intent intEdit = new Intent(ListActivity.this, MainActivity.class); 
     intEdit.putExtra("EditID", user_id); 
     startActivityForResult(intEdit, 1); 
    } 

    private void deleteUserData(int indexid) { 
     // TODO Auto-generated method stub 
//  String user_id = items_id.get(indexid); 
     //Toast.makeText(getApplicationContext(), "id " + user_id, 1).show(); 
     db = dh.getWritableDatabase(); 
     db.delete("timer","_ID" + "=" + indexid, null); 
     finish(); 
//  Toast.makeText(getApplicationContext(), "Record deleted successfully", 1).show(); 
    } 

    private void showAllData(Cursor c) { 
     // TODO Auto-generated method stub 
     while(c.moveToNext()) 
     { 
      int id = c.getInt(0); 
      String name = c.getString(1); 
      String timerpoint1 = c.getString(2); 
      String timerpoint2 = c.getString(3); 
      String timerpoint3 = c.getString(4); 
      String servicetime1 = c.getString(5); 
      String servicetime2 = c.getString(6); 
      items.add("" + name); 
      items_id.add(""+id); 
     } 
     setUpList(); 
    } 

    private Cursor getAllData() { 
     // TODO Auto-generated method stub 
     db = dh.getReadableDatabase(); 
     //String sortorder = dh.Name + "DESC"; 
    // String query ="SELECT DISTINCT name FROM timer"; 
    // Cursor c = db.rawQuery(query, null); 
    // if (c != null) { 
    //   c.moveToFirst(); 
    //  } 
//  String[] cols = new String[] {"name"}; 
     Cursor c = db.query(true, "timer",null,null,null,null,null,null,null); 
     //Cursor cur = db.query(Distinct,"timer", null, null, null, null, null, null, null); 
     startManagingCursor(c); 
    // Cursor c=db.rawQuery("select distinct Name from timer;",null); 
     return c; 
     }  
    private void setUpList() { 
     // TODO Auto-generated method stub 
     lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,items)); 
    } 

    } 
+0

somebuddy幫助我。 –

+0

我認爲你可以在你的查詢中只用'DISTINCT'來獲得不同的記錄 – Hein

+0

請給我一個代碼爲那個HERO .. –

回答

0

嘗試用GROUP BY。如果您仍然沒有找到想要的結果,請檢查您是否在執行sqlite查詢時遇到了問題並通知我。

SELECT Name 
FROM timer 
GROUP BY Name 
+0

thanx提前appu,我會申請你的代碼, –

+0

對不起你的代碼不工作。 OMG! –

+0

OMG!我沒有看到它。你剛剛做了什麼與ListActivity。你正在編寫這個「公共類ListActivity擴展活動」。你能告訴我你用什麼目的定義你的班級與預定義的名字「ListActivity」 – Kanth

0

如何避免在ListView中重複輸入?

避免重複使用addRecord方法()。因爲當你在addRecord()中調用insert()時,只需要一次在onClick()中定義addRecord(),並最終避免在Listview中使用相同的記錄條目。

相關問題