總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2012年1月5日 星期四

SQLiteOpenHelper ~ 旅遊匯率隨時查(三)

這篇新增加一個可以自行輸入購買商品資訊的功能,
讓外出旅遊除了可以隨時計算匯率,
更可以紀錄自己敗了哪些東西啦~







為此,
除了修改layout (layout_exchangerate.xml),
再新增Adapter_ListView_Shopping.java來自訂第2個ListView的樣式, 其載入layout_adapter_listview_shopping.xml 內含三個TextView,
code的架構如下










Adapter_ListView_Shopping.java
package com.tsots.ExchangeRate;

import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class Adapter_ListView_Shopping extends BaseAdapter
{
 private LayoutInflater mInflater;
 List adapter_allarray_shopping_icon;
 List adapter_allarray_shopping_item;
 List adapter_allarray_shopping_nt;
 TextView column_shopping_icon;
 TextView column_shopping_item;
 TextView column_shopping_nt;

 public Adapter_ListView_Shopping
 (
   Context context,
   int simple_list_item_single_choice, 
   List allarray_shopping_icon,
   List allarray_shopping_item, 
   List allarray_shopping_nt
 ) 
 {
  mInflater = LayoutInflater.from(context);
  adapter_allarray_shopping_icon = allarray_shopping_icon;
  adapter_allarray_shopping_item = allarray_shopping_item;
  adapter_allarray_shopping_nt = allarray_shopping_nt;
 }

 public int getCount()
 {
  return adapter_allarray_shopping_item.size();
 }

 public Object getItem(int position)
 {
  return adapter_allarray_shopping_item.size();
 }
  
 public long getItemId(int position)
 {
  return position;
 }
  
 public View getView(int position,View convertView,ViewGroup parent)
 {   
  convertView = mInflater.inflate(R.layout.layout_adapter_listview_shopping,null);
  column_shopping_icon = (TextView)convertView.findViewById(R.id.column_shopping_icon);
  column_shopping_item = (TextView)convertView.findViewById(R.id.column_shopping_item);
  column_shopping_nt = (TextView)convertView.findViewById(R.id.column_shopping_nt);
      column_shopping_icon.setText(adapter_allarray_shopping_icon.get(position).toString());
      column_shopping_item.setText(adapter_allarray_shopping_item.get(position).toString());
      column_shopping_nt.setText(adapter_allarray_shopping_nt.get(position).toString());
     return convertView;
 }
}

在主程式的部份,
新增bt_save button的onClick事件,
將user所輸入的et_item和et_money值存入資料庫並更新到ListView (lv_shopping)

Activity_ExchangeRate.java
bt_save.setOnClickListener(new OnClickListener()
        {
   public void onClick(View v) 
   {
    et_item.getText().toString();
    et_money.getText().toString();
    //存入資料庫
    save_sqlite_table_listview_shopping();
    //另外呼叫function做setAdapter
    update_listview_shopping();
   }
        });

/*
* 更新ListView畫面資料
*/

Activity_ExchangeRate.java
public void update_listview_shopping()
    {
     Log.i(Tag, "設定listview_shopping內容");
     allarray_shopping_icon = new ArrayList();
     allarray_shopping_item = new ArrayList();
     allarray_shopping_nt = new ArrayList();
     Cursor cursor_sqlite_table_listview_shopping = null;
     try
     {
      cursor_sqlite_table_listview_shopping = dbHelper.select(tables[3], null, null, null, null, null, null);
      cursor_sqlite_table_listview_shopping.moveToFirst();
      do
      {
       allarray_shopping_icon.add(cursor_sqlite_table_listview_shopping.getString(0));
       allarray_shopping_item.add(cursor_sqlite_table_listview_shopping.getString(2));
       allarray_shopping_nt.add(cursor_sqlite_table_listview_shopping.getString(3));
      }while(cursor_sqlite_table_listview_shopping.moveToNext());
     }
     catch(Exception e)
     {
      System.out.println("501 Exception : update_listview()");
     }
     finally
     {
      cursor_sqlite_table_listview_shopping.close();
     }

     /*新增購物列表*/
     adapter_listview_shopping = new Adapter_ListView_Shopping
     (
      context, 
      android.R.layout.simple_list_item_1, 
      allarray_shopping_icon, 
      allarray_shopping_item,
      allarray_shopping_nt
     );
     //將ListAdapter的可選(Focusable)選單選項打開
     lv_shopping.setItemsCanFocus(true);
     lv_shopping.setFocusable(true);
     //設定ListView選單選項設為每次只能單一選項
     lv_shopping.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
     lv_shopping.setAdapter(adapter_listview_shopping); 
    }


/*
* 新增tables[3]內的資料
* {"fieldname_id", "fn_shopping_icon", "fn_shopping_item", "fn_shopping_nt"}
*/

Activity_ExchangeRate.java
public void save_sqlite_table_listview_shopping()
    {
     Log.i(Tag, "儲存tables[3]資料ing...");
     Cursor cursor_sqlite_table_listview_shopping = null;
  try
  { 
   cursor_sqlite_table_listview_shopping = dbHelper.select(tables[3], null, null, null, null, null, null);
   cursor_sqlite_table_listview_shopping.moveToFirst();  
   String[] updateFields = {"fn_shopping_icon", "fn_shopping_item", "fn_shopping_nt"};
   String[] updateValues = {"1", et_item.getText().toString(), et_money.getText().toString()};
   dbHelper.insert(tables[3], updateFields, updateValues);
      //dbHelper.update(tables[3], updateFields, updateValues, null, null);      
  }
  catch(Exception e)
  {
   System.out.println("219 Exception : save_sqlite_table_listview_shopping()");
  }
  finally
  {
   cursor_sqlite_table_listview_shopping.close();
  }
    }


最後加入lv_shopping的onItemClick事件,
讓user可以將加入過的資料做刪除

Activity_ExchangeRate.java
lv_shopping.setOnItemClickListener(new OnItemClickListener()
     {
   public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) 
   {
    intItemSelected = arg2;
    new AlertDialog.Builder(context)
          .setMessage("delete item "+arg2+" ?")
          .setPositiveButton("yes",new DialogInterface.OnClickListener()
          {
           public void onClick(DialogInterface dialog, int whichButton)
           {
               Cursor cursor_sqlite_table_listview_shopping = null;
               try
               {
                cursor_sqlite_table_listview_shopping = dbHelper.select(tables[3], null, null, null, null, null, null);
                   String where = "fieldname_id=?";
                   String[] whereValue = 
                   {
                    allarray_shopping_icon.get(intItemSelected)
                   };
                dbHelper.delete(tables[3], where, whereValue);
                update_listview_shopping();
               }
               catch(Exception e)
               {
                
               }
               finally
               {
                cursor_sqlite_table_listview_shopping.close();
               }
           }
          })
          .setNegativeButton("no", new DialogInterface.OnClickListener()
          {
           public void onClick(DialogInterface dialog, int whichButton)
           {
             
           }
          })
          .show();
   }      
     }); 

為使lv_shopping的"fn_shopping_icon"在Activity顯示重新編號, 修改以下部份

public void update_listview_shopping()
    {
    ...
try
{
      cursor_sqlite_table_listview_shopping = dbHelper.select(tables[3], null, null, null, null, null, null);
      cursor_sqlite_table_listview_shopping.moveToFirst(); 
      int count =0;
      do
      { 
       count++;
       //allarray_shopping_icon.add(cursor_sqlite_table_listview_shopping.getString(0)); 
       allarray_shopping_icon.add(String.valueOf(count));
       allarray_shopping_item.add(cursor_sqlite_table_listview_shopping.getString(2));
              allarray_shopping_nt.add(cursor_sqlite_table_listview_shopping.getString(3));
      }while(cursor_sqlite_table_listview_shopping.moveToNext());
     }
     ...
    }

lv_shopping.setOnItemClickListener(new OnItemClickListener()
     {
   public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) 
   {
...
try
               {
                cursor_sqlite_table_listview_shopping = dbHelper.select(tables[3], null, null, null, null, null, null);
                   String where = "fieldname_id=?";
cursor_sqlite_table_listview_shopping.moveToPosition(intItemSelected);
String[] whereValue = 
                   {
                    //allarray_shopping_icon.get(intItemSelected) 
cursor_sqlite_table_listview_shopping.getString(0)
};
                dbHelper.delete(tables[3], where, whereValue);
                update_listview_shopping();
               }
});

沒有留言:

張貼留言