2016-08-11 47 views
0

在这个应用程序中,用户将产品添加到他们的购物清单。然后他可以通过切换到下面的类来查看他的产品添加到购物清单。用户也可以删除行。现在,我希望用户可以通过单击存储产品的行来选择更新产品,然后我想要一个对话框/烤面包,用户可以选择要更新的内容,例如产品名称,之后详细信息将在列表中更新。我想知道这可能吗?谢谢。 Edit_Activity我已经尝试在displayInputDialog我想更新我的列表视图中的行与OnClickListener

我会分享我的代码只是为了把更多的理解

数据库类

public class DatabaseClass extends SQLiteOpenHelper { 
    public static final String DATABASE_Name = "Product.db2"; 
    public static final String Table_Name = "product_table2"; 
    public static final String COL_1 = "ID"; 
    public static final String COL_2 = "Name"; 
    public static final String COL_3 = "Quantity"; 
    public static final String COL_4 = "Category"; 
    public static final String COL_5 = "Importance"; 
    public DatabaseClass(Context context) { 
     super(context, DATABASE_Name, null, 1); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("create table " + Table_Name + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,Quantity TEXT,Category INTEGER,Importance TEXT);"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("Drop Table If Exists" + Table_Name); 
     onCreate(db); 
    } 

    public boolean insertData(String name, String quantity, String category,String importance) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(COL_2, name); 
     contentValues.put(COL_3, quantity); 
     contentValues.put(COL_4, category); 
     contentValues.put(COL_5, importance); 

     long result = db.insert(Table_Name, null, contentValues); 

      if (result == -1) 
       return false; 
      else 
       return true; 
     } 

    public Cursor getAllData() { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor res = db.rawQuery("select * from " + Table_Name, null); 
     return res; 
    } 

    public boolean updateData(String id,String name,String quantity,String category,String importance) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(COL_1, id); 
     contentValues.put(COL_2, name); 
     contentValues.put(COL_3, quantity); 
     contentValues.put(COL_4, category); 
     contentValues.put(COL_5, importance); 
     db.update(Table_Name,contentValues,"id =?",new String[]{id}); 
       return true; 
    } 

    /* public Cursor getCursor(){ 
     SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); 

     queryBuilder.setR 
    } 
*/ 
    public Integer DeleteData (String id) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     return db.delete(Table_Name,"ID = ?",new String[]{id}); 
    } 
    public static void DeleteInformation(String item_name, SQLiteDatabase sqLiteDatabase){ 

     String selection = COL_1+" LIKE ?"; 
     String [] selection_args = {item_name}; 
     sqLiteDatabase.delete(Table_Name,selection,selection_args); 

    } 

    public Cursor getInformation(SQLiteDatabase sqLiteDatabase) 
    { 
     Cursor cursor; 
     String [] Projections = {COL_1,COL_2,COL_4}; 

     cursor = sqLiteDatabase.query(Table_Name,Projections,null,null,null,null,null); 
     return cursor; 

    } 

    public Cursor getItem(String item_name ,SQLiteDatabase sqLiteDatabase){ 
     String [] Projections = {COL_1,COL_2,COL_3,COL_4,COL_5}; 
     String selection = COL_1+" LIKE ?"; 
     String [] selection_args = {item_name}; 
     Cursor cursor = sqLiteDatabase.query(Table_Name,Projections,selection,selection_args,null,null,null); 
     return cursor; 

    } 


} 

DataProvider类

package ie.example.artur.projectrepeat; 

/** 
* Created by family on 10/08/2016. 
*/ 
public class DataProvider { 

    private String id; 
    private String product_name; 
    private String category; 

    public DataProvider(String id,String product_name,String category) 
    { 
    this.id = id; 
    this.product_name=product_name; 
    this.category=category; 




    } 


    public String getCategory() { 
     return category; 
    } 

    public void setCategory(String category) { 
     this.category = category; 
    } 


    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getProduct_name() { 
     return product_name; 
    } 

    public void setProduct_name(String product_name) { 
     this.product_name = product_name; 
    } 
} 




package ie.example.artur.projectrepeat; 

import android.app.Dialog; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 

public class Edit_Activity extends AppCompatActivity implements AdapterView.OnItemClickListener { 

    ListView listView; 
    SQLiteDatabase sqLiteDatabase; 
    DatabaseClass database; 
    Cursor cursor; 
    ListDataAdapter listDataAdapter; 
    Dialog d; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_edit); 


     listView = (ListView) findViewById(R.id.list_view); 
     listDataAdapter = new ListDataAdapter(getApplicationContext(), R.layout.row_layout); 
     listView.setAdapter(listDataAdapter); 
     listView.setOnItemClickListener(this); 
     database = new DatabaseClass(getApplicationContext()); 

     sqLiteDatabase = database.getReadableDatabase(); 

     Cursor cursor = database.getInformation(sqLiteDatabase); 

     if (cursor.moveToFirst()) { 
      do { 

       String id, product_name, category; 
       id = cursor.getString(0); 
       product_name = cursor.getString(1); 
       category = cursor.getString(2); 
       DataProvider dataProvider = new DataProvider(id, product_name, category); 
       listDataAdapter.add(dataProvider); 
      } while (cursor.moveToNext() 


        ); 

     } 


    } 

这将是我的更新类 Edit_Activity

package ie.example.artur.projectrepeat; 

import android.app.Dialog; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 

public class Edit_Activity extends AppCompatActivity implements AdapterView.OnItemClickListener { 

    ListView listView; 
    SQLiteDatabase sqLiteDatabase; 
    DatabaseClass database; 
    Cursor cursor; 
    ListDataAdapter listDataAdapter; 
    Dialog d; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.data_list_layout); 


     listView = (ListView) findViewById(R.id.list_view); 
     listDataAdapter = new ListDataAdapter(getApplicationContext(), R.layout.row_layout); 
     listView.setAdapter(listDataAdapter); 
     listView.setOnItemClickListener(this); 
     database = new DatabaseClass(getApplicationContext()); 

     sqLiteDatabase = database.getReadableDatabase(); 

     Cursor cursor=database.getInformation(sqLiteDatabase); 

     if (cursor.moveToFirst()) { 
      do { 

       String id, product_name, category; 
       id = cursor.getString(0); 
       product_name = cursor.getString(1); 
       category = cursor.getString(2); 
       DataProvider dataProvider = new DataProvider(id, product_name, category); 
       listDataAdapter.add(dataProvider); 
      } while (cursor.moveToNext() 


        ); 

     } 

    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     TextView tv = (TextView) view.findViewById(R.id.product_id); 
     sqLiteDatabase = database.getReadableDatabase(); 

    } 

    private void displayInputDialog(final int pos) { 
     d = new Dialog(this); 
     d.setTitle("List View"); 
     d.setContentView(R.layout.input); 

     final EditText nameEditText = (EditText) d.findViewById(R.id.product_name); 
     Button updateBtn = (Button) d.findViewById(R.id.updateBtn); 


     if (pos == -1) { 

      updateBtn.setEnabled(false); 
     } else 

      updateBtn.setEnabled(true); 


     updateBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

      } 
     }); 

    } 
} 

ListDataAdapter类

package ie.example.artur.projectrepeat; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by family on 10/08/2016. 
*/ 
public class ListDataAdapter extends ArrayAdapter { 
    List list = new ArrayList(); 

    public ListDataAdapter(Context context, int resource) { 
     super(context, resource); 
    } 





    static class LayoutHandler 
    { 
     TextView id,product_name,category; 

    } 
    @Override 
    public void add(Object object) { 
     super.add(object); 
     list.add(object); 
    } 

    @Override 
    public int getCount() { 
     return list.size(); 

    } 


    @Override 
    public Object getItem(int position) { 
     return list.get(position); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutHandler layoutHandler; 
     View row = convertView; 
     if(row == null) 
     { 
      LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = layoutInflater.inflate(R.layout.row_layout,parent,false); 
      layoutHandler = new LayoutHandler(); 
      layoutHandler.id = (TextView) row.findViewById(R.id.product_id); 
      layoutHandler.product_name = (TextView) row.findViewById(R.id.product_name); 
      layoutHandler.category = (TextView) row.findViewById(R.id.product_category); 
      row.setTag(layoutHandler); 
     } 
     else { 
      layoutHandler = (LayoutHandler) row.getTag(); 

     } 
     DataProvider dataProvider = (DataProvider) this.getItem(position); 
     layoutHandler.id.setText(dataProvider.getId()); 
     layoutHandler.product_name.setText(dataProvider.getProduct_name()); 
     layoutHandler.category.setText(dataProvider.getCategory()); 





     return row; 





    } 


    } 

回答

0

干脆创建一个使用SQL更新一排databasehelper的方法。 。创建onItemClickListener,当你点击列表上的一个项目时,出现一个弹出对话框,其中包含你需要的edittext

+0

我起床弹出对话框,但现在我不知道在主要活动中要做什么,将如何实施更新? – angela

相关问题