2014-10-02 162 views
0

我想从listView和数据库中删除项目,但我无法应付。我扔了代码,我希望能提供帮助。我在屏幕上用showList抛出代码并保存到数据库sqlite。任何想法?我也是一个初学者,任何帮助将不胜感激。我在看教程和删除不适合我。我不知道为什么。如何在退出应用程序后清除我的列表?因为当我去到应用程序的列表视图中的数据仍然可见。Android和从ListView和sqlite数据库中删除项目

public class PropertyListAdapter extends BaseAdapter { 


     Context context; 
     ArrayList<Property> propertyList; 

     public PropertyListAdapter(Context context, ArrayList<Property> list) { 

      this.context = context; 
      propertyList = list; 
     } 



     @Override 
     public int getCount() { 

      return propertyList.size(); 
     } 

     @Override 
     public Object getItem(int position) { 

      return propertyList.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 

      return position; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup arg2) { 
      View vi = convertView; 
      Property propertyListItems = propertyList.get(position); 

      if (convertView == null) { 
       LayoutInflater inflater = (LayoutInflater) context 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       vi = inflater.inflate(R.layout.property_list_row, null); 

      } 
      TextView tvSlNo = (TextView) convertView.findViewById(R.id.tv_slno); 
      tvSlNo.setText(String.valueOf(propertyListItems.getId())); 
      TextView tvName1 = (TextView) convertView.findViewById(R.id.tv_name1); 
      tvName1.setText(propertyListItems.getType()); 
      TextView tvName = (TextView) convertView.findViewById(R.id.tv_name); 
      tvName.setText(propertyListItems.getAddress()); 
      TextView tvPhone = (TextView) convertView.findViewById(R.id.tv_phone); 
      tvPhone.setText(String.valueOf(propertyListItems.getValue())); 
      TextView tvPhone1 = (TextView) convertView.findViewById(R.id.tv_phone1); 
      tvPhone1.setText(String.valueOf(propertyListItems.getDebt())); 
      TextView tvName2 = (TextView) convertView.findViewById(R.id.tv_name2); 
      tvName2.setText(propertyListItems.getNotes()); 

      Button deletePropertyItem = (Button) vi.findViewById(R.id.DeletePropertyListItem); 
      deletePropertyItem.setTag(position); 
      deletePropertyItem.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Integer index = (Integer)v.getTag(); 
        propertyList.remove(position); 
        notifyDataSetChanged(); 
       } 
      }); 
      return vi; 

      } 








db = new MeetingsDataBaseHelper(this); 
     showList(); 
     add1.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Double value1, debt; 
       String editValueDb1,editDebtDb1; 

       final Integer idEncounterToPass = AppMainScreen.getMeetingListClickedItem().getEncounter_id(); 
       String type = editTextTypeProperty.getText().toString(); 
       String address = editAddresse1.getText().toString(); 
       // Double value1 = Double.valueOf(editValue1.getText().toString()); 
       String editValue1String = ReportMainScreen.editValue1.getText().toString(); 
       if (editValue1String.length() > 0) 
       { 
        value1 = Double.valueOf(editValue1String); 

       } else { 

        value1 = Double.valueOf("0.00"); 

       } 
       // Double debt = editViewDebt1.getText().toString(); 
       String editDebtString = ReportMainScreen.editViewDebt1.getText().toString(); 
       if (editDebtString.length() > 0) 
       { 
        debt = Double.valueOf(editDebtString); 

       } else { 

        debt = Double.valueOf("0.00"); 

       } 
       String notes = editNotesProperty.getText().toString(); 
       String encounter_id = String.valueOf(idEncounterToPass); 
       String posted = "0"; 

       String query = "INSERT INTO property(type,address,value,debt,notes,encounter_id,posted) values ('" 
         + type + "','" + address + "','" + value1 + "','" + debt + "','" + notes + "','" + encounter_id + "','" + posted + "')"; 
       db.executeQuery(query); 
       showList(); 
       editTextTypeProperty.setText(""); 
       editAddresse1.setText(""); 
       editValue1.setText(""); 
       editViewDebt1.setText(""); 
       editNotesProperty.setText(""); 
      } 
     }); 



    private void showList() { 

      ArrayList<Property> propertyList = new ArrayList<Property>(); 
      propertyList.clear(); 
      String query = "SELECT * FROM property "; 
      Cursor c1 = db.selectQuery(query); 
      if (c1 != null && c1.getCount() != 0) { 
       if (c1.moveToFirst()) { 
        do { 
         Property propertyListItems = new Property(); 
         propertyListItems.setId(Integer.valueOf(c1.getString(c1.getColumnIndex("id")))); 
         propertyListItems.setType(c1.getString(c1.getColumnIndex("type"))); 
         propertyListItems.setAddress(c1.getString(c1.getColumnIndex("address"))); 
         propertyListItems.setValue(Double.valueOf(c1.getString(c1.getColumnIndex("value")))); 
         propertyListItems.setDebt(Double.valueOf(c1.getString(c1.getColumnIndex("debt")))); 
         propertyListItems.setNotes(c1.getString(c1.getColumnIndex("notes"))); 
         propertyList.add(propertyListItems); 

        } while (c1.moveToNext()); 
       } 
      } 
      c1.close(); 

      PropertyListAdapter propertyListAdapter = new PropertyListAdapter(ReportMainScreen.this, propertyList); 
      first_list_view.setAdapter(propertyListAdapter); 
      propertyListAdapter.notifyDataSetChanged(); // TODO check this reg. clearing subtables 


      // propertyList.remove(propertyListAdapter); 

     } 
+0

如何使用按钮从列表中删除记录?你能告诉我吗? – Umair 2014-10-02 12:16:59

+0

我看到'propertyList.remove(position);'调用但我没有看到DELETE语句在db上执行... – Selvin 2014-10-02 12:28:15

回答

0

删除的数据库

private void DeleteItemFormList() { 
    Property property = new Property(); 
    ArrayList<Property> propertyList = new ArrayList<Property>(); 
    propertyList.clear(); 
    int id = property.getId(); 
    String delQuery = "DELETE FROM Property WHERE id='"+id+"' "; 
    db.executeQuery(delQuery); 
    showList(); 

    PropertyListAdapter propertyListAdapter = new PropertyListAdapter(ReportMainScreen.this, propertyList); 
    first_list_view.setAdapter(propertyListAdapter); 
    propertyListAdapter.notifyDataSetChanged(); // TODO check this reg. clearing subtables 


    // propertyList.remove(propertyListAdapter); 

} 
0

我认为你需要通过标识是autoIncreament代替possition。
即。

int index=propertyList.get(position).get(Id); 
    Button deletePropertyItem = (Button) vi.findViewById(R.id.DeletePropertyListItem); 
    deletePropertyItem.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    propertyList.remove(index); 
    notifyDataSetChanged(); 
    } 
}); 
+0

我在那里有id = 1然后我得到错误java.lang.IndexOutOfBoundsException:无效索引1,大小为1.我有2个项目id = 1和id = 2,然后按id = 1删除它删除我的id = 2行 – Danio9004 2014-10-02 13:28:23

+0

任何想法如何解决这个问题? – Danio9004 2014-10-03 09:55:09

+0

这个工作对我来说:在propertyList.remove(index)后调用你的showList()方法; – Jaydeep 2014-10-03 10:54:25

相关问题