2017-07-03 239 views
1

我試圖從列表適配器中刪除一行listview,如果單擊一個按鈕,它將查找該id並將其發送到數據庫進行刪除。我寫的方法返回最後一個可用的id,而不是所選的一個。 這裏是清單適配器從Android中的SQLdatabase中刪除行通過id

public class HistoryAdapter extends ArrayAdapter<NassrahHelper> { 
int ID; 
public HistoryAdapter(@NonNull Context context, ArrayList<NassrahHelper> resource) { 
    super (context, R.layout.history_listadapter ,resource); 
} 

@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    LayoutInflater ListInflate = LayoutInflater.from(getContext()); 

    ValuesHelper data = getItem(position); 

    View customView = ListInflate.inflate (R.layout.history_listadapter,parent,false); 

    ID = data.H_ID; 

    String first = data.Date; 
    TextView date = (TextView) customView.findViewById (R.id.DateText); 

    TextView DeleteBtn = (TextView) customView.findViewById(R.id.DeleteText); 

    DeleteBtn.setOnClickListener(
      new View.OnClickListener() { 
       public void onClick(View view) { 
        DeleteRecord(); 
       } 
      } 
    ); 

    date.setText (first); 
    return customView; 
} 
private void DeleteRecord() {   
     DataBaseHelper dataBaseHelper = new DataBaseHelper(getContext()); 
        dataBaseHelper.DeleteHistoryRow(ID); 
        dataBaseHelper.close(); 

} 

這是數據庫類:

public boolean DeleteHistoryRow(int id) { 
SQLiteDatabase database = this.getWritableDatabase(); 

database.delete (HISTORY_TABLE, "ID = ?", new String[]{String.valueOf(id)}); 
Log.w ("DELETE History", "DELTE Secssuffle"); 
database.close(); 
return true; 

}

回答

1

在刪除按鈕的onClick方法你必須使用poistion從列表中獲得Id和需要通過那個刪除記錄功能。

DeleteBtn.setOnClickListener(
      new View.OnClickListener() { 
       public void onClick(View view) { 
        ID = getItem(position).H_ID; 
        DeleteRecord(); 
       } 
      } 
    ); 

刪除數據庫中的記錄和已分配給適配器列表後,你需要調用notifiy數據集的改變方法,以反映列表視圖。

+0

完美。但它給了我這個「變量」的位置「是從內部類訪問的,需要被聲明爲最終的」。所以你將不得不宣佈位置爲最後謝謝@ Chirag Raval –

+0

如何清除刪除後清單,如果你知道我如何嘗試notifyDataSetChanged(); –

+0

您還必須從列表中刪除已分配給列表視圖適配器的記錄。之後,你必須在適配器上調用notifyDataSetChanged方法。 –