某extends Activity的class以下列方式呼叫extends DialogFragment的class
InfoDialog dialog = new InfoDialog(context);
Bundle args = new Bundle();
args.putInt(InfoDialog.BUNDLE_KEY_PRIZE, -1);
dialog.setArguments(args);
dialog.show();
InfoDialog extends DialogFragment內含ListView
Adapter adapter = new Adapter(context, deadlineList);
ListView lv = (ListView) dialog.findViewById(R.id.lv);
lv.setAdapter(adapter);
lv.setOnItemClickListener(this);//無法work
Adapter extends BaseAdapter其內ListView又含Button的click事件, 為取得click的Button所在位置, 將code改寫成:
ArrayList<String> adapter_deadline;
class ViewHolder {
TextView deadline;
Button exchange;
}
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder = null;
if (convertView == null) {
convertView = View.inflate(context, R.layout.adapter_listview_prize, null);
holder = new ViewHolder();
holder.deadline = (TextView)convertView.findViewById(R.id.summary);
holder.exchange = (Button)convertView.findViewById(R.id.exchange);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.deadline.setText(.get(position).toString());
OnClick listener = new OnClick(position);
holder.exchange.setOnClickListener(listener);
return convertView;
}
class OnClick implements OnClickListener {
private int position;
public OnClick(int position){
this.position = position;
}
@Override
public void onClick(View v) {
Toast.makeText(context, "position "+position, Toast.LENGTH_SHORT).show();
LayoutInflater factory = LayoutInflater.from(context);
final View view = factory.inflate(R.layout.layout_questionnaire, null);
AlertDialog.Builder mAB = new AlertDialog.Builder(context);
mAB.setView(view);
alert = mAB.create();
alert.show();
}
}
總網頁瀏覽量
基礎Note
☪About Me
(1)
免費軟體
(2)
教學
(4)
教學文件
(42)
會計軟體
(1)
電腦系統
(1)
Adapter
(8)
Adobe Premiere
(1)
AlertDialog
(7)
Android App 介紹
(1)
Animation
(1)
API
(2)
APP範例
(1)
Array
(1)
AsyncTask
(1)
Auto Test Case
(32)
AutoCompleteTextView
(1)
Bitmap Drawable
(3)
BroadcastReceiver
(4)
Button
(1)
Codility
(2)
Contact
(4)
DB
(1)
Dialog
(2)
Documents
(1)
Eclipse
(3)
Ellipsize
(1)
File
(4)
Focus
(2)
Fragment
(4)
Gallery
(2)
GIT
(4)
GitHub
(1)
GridView
(8)
HashMap
(1)
HorizontalScrollView
(6)
IIS
(1)
Intent
(3)
IntentService
(1)
Internet
(2)
KeyEvent
(1)
Layout
(1)
ListView
(11)
Log
(1)
Mac / iOS
(11)
Manifest
(1)
Marquee
(2)
Math
(1)
MediaPlayer
(5)
MediaRecorder
(5)
MSMQ
(1)
onClick
(1)
PackageManager
(6)
PHP
(1)
PIS
(3)
PowerManager
(1)
Progress
(2)
SCREEN
(1)
Search
(6)
Service
(1)
SharedPreferences
(3)
SimpleDateFormat
(1)
SonarQube
(1)
Sound Recorder
(1)
Spinner
(2)
SQL server Management
(16)
SQLite
(13)
String
(1)
STS
(5)
SVN
(1)
Thread
(1)
Toast
(3)
Typeface
(1)
Uri
(2)
VB.NET
(17)
VMware
(1)
關於我自己
2014年6月30日 星期一
2012年2月9日 星期四
自訂Adapter ~ 多欄位
ListViewActivity.java
package com.tstos.ListView_Adapter;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class ListViewActivity extends Activity
{
TextView textview1;
TextView textview2;
TextView listview_title_column1;
TextView listview_title_column2;
TextView listview_title_column3;
GridView gridview1;
ListView listview1;
ImageView imageview1;
String[] android_version;
String[] android_level;
String[] android_code;
Adapter_ListViewActivity adapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textview1 = (TextView)findViewById(R.id.TextView1);
textview2 = (TextView)findViewById(R.id.TextView2);
listview_title_column1 = (TextView)findViewById(R.id.ListView_title_column1);
listview_title_column2 = (TextView)findViewById(R.id.ListView_title_column2);
listview_title_column3 = (TextView)findViewById(R.id.ListView_title_column3);
listview1 = (ListView)findViewById(R.id.ListView1);
imageview1 = (ImageView) findViewById(R.id.ImageView1);
//載入default陣列
android_version = getResources().getStringArray(R.array.lstview_array_column1);
android_level = getResources().getStringArray(R.array.lstview_array_column2);
android_code = getResources().getStringArray(R.array.lstview_array_column3);
adapter = new Adapter_ListViewActivity(ListViewActivity.this,
R.layout.simple_list_item_1_small,
android_version,
android_level,
android_code);
listview1.setAdapter(adapter);
//定義ListView的點擊行為
listview1.setOnItemClickListener(new GridView.OnItemClickListener()
{
public void onItemClick(AdapterView parent, View v, int position, long arg3)
{
textview1.setText(android_version[position]);
switch(position)
{
case 0://1.0
imageview1.setAlpha(0);//將圖片設為完全透明
textview2.setText(getResources().getString(R.string.no_code_name));
break;
case 1://1.1
imageview1.setAlpha(0);
textview2.setText(getResources().getString(R.string.no_code_name));
break;
case 2://1.5
imageview1.setAlpha(255);//將圖片設為不透明
imageview1.setImageResource(R.drawable.cupcake);
textview2.setText(getResources().getString(R.string.cupcake));
break;
case 3://1.6
imageview1.setAlpha(255);
imageview1.setImageResource(R.drawable.donut);
textview2.setText(getResources().getString(R.string.donut));
break;
case 4://2.0
imageview1.setAlpha(255);
imageview1.setImageResource(R.drawable.eclair);
textview2.setText(getResources().getString(R.string.eclair));
break;
case 5://2.0.1
imageview1.setAlpha(255);
imageview1.setImageResource(R.drawable.eclair);
textview2.setText(getResources().getString(R.string.eclair));
break;
case 6://2.1
imageview1.setAlpha(255);
imageview1.setImageResource(R.drawable.eclair);
textview2.setText(getResources().getString(R.string.eclair));
break;
case 7://2.2
imageview1.setAlpha(255);
imageview1.setImageResource(R.drawable.froyo);
textview2.setText(getResources().getString(R.string.froyo));
break;
case 8://2.3
imageview1.setAlpha(255);
imageview1.setImageResource(R.drawable.gingerbread);
textview2.setText(getResources().getString(R.string.gingerbread));
break;
case 9://2.3.3 - 2.3.4
imageview1.setAlpha(255);
imageview1.setImageResource(R.drawable.gingerbread);
textview2.setText(getResources().getString(R.string.gingerbread));
break;
case 10://3.0
imageview1.setAlpha(255);
imageview1.setImageResource(R.drawable.honeycomb);
textview2.setText(getResources().getString(R.string.honeycomb));
break;
case 11://3.1
imageview1.setAlpha(255);
imageview1.setImageResource(R.drawable.honeycomb);
textview2.setText(getResources().getString(R.string.honeycomb));
break;
}
}
});
}
}
2012年1月24日 星期二
撈出聯絡人資料 ~ 照片 ~ 並換圖 BitmapFactory.decodeByteArray
要讀取聯絡人資料記得Manifest.xml中要加入
Launch這個AP後, 會撈出Device中聯絡人的資料, 列出有人名(ContactsContract.Contacts.DISPLAY_NAME有值)的資料, 並抓出聯絡人圖片, 如果沒設的就顯示⊕
本範例目的在自行更換圖示, 所以用了兩個Activity -> 選擇要換圖的item後 -> open另一個Activity選圖



![]() |
| 換換換~ |
![]() |
| 帶有圖片的Toast |
如此我們便可以任意更換聯絡人圖示~不過這個AP並沒有真正寫入資料到ContactsContract.Contacts,也沒有建立資料庫存放, 所以關閉後所有的變更就會不見囉.
ContactPhotoActivity.java
package com.tsots.GridView_Contact_ChangePhoto;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
public class ContactPhotoActivity extends Activity
{
Context context = ContactPhotoActivity.this;
List total_contact_id= new ArrayList();
List contact_name= new ArrayList();
List contact_photo= new ArrayList();
GridView g1;
String photoId;
String tag = "com.tsots.GridView_Contact_ChangePhoto / ContactPhotoActivity.java";
int num_contact=0;
int num_contact_photo=0;
int contact_id;
int photo;
Bitmap photoBitmap;
Bitmap tmp_photoBitmap;
Bitmap map;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
g1 = (GridView) findViewById (R.id.gridview1);
//陣列內容: 從contact撈出有顯示名稱的資料
final String[] selectNameColumn = new String[]{
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
final Cursor cursor_ContactName = getContentResolver().query(
Contacts.CONTENT_URI, //要查詢的表格
selectNameColumn, //要回傳的欄位組合
null,
null,
null
);
try
{
cursor_ContactName.moveToFirst();
do
{
/*****************************聯絡人在被建立時該id***************************************
* int idColumn = cursor_ContactName.getColumnIndex(ContactsContract.Contacts._ID);
* String contactId = cursor_ContactName.getString(idColumn);//會丟入59筆資料
*****************************等於*****************************************************/
String contactId = cursor_ContactName.getString(0); //回傳有DISPLAY_NAME的資料,個人Device有59筆
/*****************************聯絡人姓名***********************************************
* final int nameColumn = cursor_ContactName.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
* String contactName = cursor_ContactName.getString(nameColumn);
*****************************等於*****************************************************/
String contactName = cursor_ContactName.getString(1);
try
{
byte[] photo = getPhoto(contactId); //只會得到24筆資料
num_contact++;
map = BitmapFactory.decodeByteArray(photo, 0, photo.length);
total_contact_id.add(String.valueOf(contactId));
contact_name.add(num_contact + " " + String.valueOf(contactName));
contact_photo.add(map);
}
catch(Exception e)
{
System.out.println("e = "+e);
}
}while(cursor_ContactName.moveToNext());
Adapter_ContactPhotoActivity adapter = new Adapter_ContactPhotoActivity(
this,
contact_name,
contact_photo
);
g1.setNumColumns(3); //每排3筆資料
g1.setAdapter(adapter); //自訂的Adapter
/*
* 加入GridView的點擊事件
* 記錄user點選的位置到"CONTACT_POSITION", 這個數值是在PhotoSelect.java中選好換圖事件後,
* 所要對哪個聯絡人欄位變更資訊的依據
*/
class ItemClickListener implements OnItemClickListener
{
public void onItemClick(AdapterView arg0,//The AdapterView where the click happened
View v, //The view within the AdapterView that was clicked
int position, //The position that be clicked
long id //The row id of the item that was clicked
)
{
Intent intent = new Intent(context, PhotoSelect.class);
Bundle bundle = new Bundle();
bundle.putInt("CONTACT_POSITION", position);
intent.putExtras(bundle);
Log.i(tag, "select position : "+position);
Log.i(tag, "select contact_name : "+contact_name.get(position));
startActivityForResult(intent,0);
}
}
g1.setOnItemClickListener(new ItemClickListener());
}
finally
{
cursor_ContactName.close();
}
}
/*
* 這個function負責從聯絡人中撈出有PHOTO_ID的資料, 並以byte[]的型態回傳
*/
public byte[] getPhoto(String people_id)
{
byte[] contactIcon = null;
String photo_id = null;
String selection1 = ContactsContract.Contacts._ID + " = " + people_id;
Cursor cur_select_name = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, /*搜尋對象*/
null,
selection1, /*條件*/
null,
null
);
//會丟入59筆資料
if (cur_select_name.getCount() > 0)
{
cur_select_name.moveToFirst();
photo_id = cur_select_name.getString(cur_select_name.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
}
String[] projection = new String[] {ContactsContract.Data.DATA15};
String select_photo = ContactsContract.Data._ID + " = " + photo_id; //只抓有photo的data
//String selection = ContactsContract.Data._ID; //抓所有有名字的data, 且沒有抓到photo值
Cursor cur_select_photo = getContentResolver().query(
ContactsContract.Data.CONTENT_URI, //要查詢的表格
projection, //要回傳的欄位組合
select_photo, //符合這個限制資料的才會回傳
null, //前一個參數的參數
null //排序
);
//會丟入59筆資料
cur_select_photo.moveToFirst();
/*
* 若由DISPLAY_NAME過濾後的資料裡, 沒有聯絡人圖片的, 統一給一個圖示, 從.png裡抓
*/
if(cur_select_photo.getCount() == 0)
{
//將圖檔轉成Bitmap
tmp_photoBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.widget_stock_addnewstock_btn_normal);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//將.png的圖檔轉成Bitmap
tmp_photoBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
contactIcon = baos.toByteArray();
return contactIcon;
}
else
{
//只會得到24筆資料
contactIcon = cur_select_photo.getBlob(0);
return contactIcon;
}
}
/*
* 從PhotoSelect.java操作完選圖的動作
* 傳回"CONTACT_POSITION"和"CONTACT_PHOTO"到ContactPhotoActivity.java
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch(resultCode)
{
case RESULT_OK:
Bundle bundle_from_PhotoSelect = data.getExtras();
contact_id = bundle_from_PhotoSelect.getInt("CONTACT_POSITION");
photo = bundle_from_PhotoSelect.getInt("CONTACT_PHOTO");
changePhoto(contact_id, photo);
break;
}
}
public void changePhoto(int id, int photo)
{
tmp_photoBitmap = BitmapFactory.decodeResource(getResources(), photo); //將int轉成Bitmap
ByteArrayOutputStream baos_from_PhotoSelect = new ByteArrayOutputStream(); //將Bitmap轉成ByteArrayOutStream
tmp_photoBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos_from_PhotoSelect);
byte[] byte_from_PhotoSelect = baos_from_PhotoSelect.toByteArray(); //將ByteArrayOutStream轉成byte
map = BitmapFactory.decodeByteArray(byte_from_PhotoSelect, 0, byte_from_PhotoSelect.length);//將byte轉成Bitmap
contact_photo.set(id, map); //可以改變contact_photo
//contact_name.set(id, "xxx"); //可以改變contact_name
Adapter_ContactPhotoActivity adapter = new Adapter_ContactPhotoActivity(
this,
contact_name,
contact_photo
);
g1.setNumColumns(3); //每排3筆資料
g1.setAdapter(adapter); //自訂的Adapter
}
} //
2012年1月12日 星期四
2012年1月11日 星期三
撈出聯絡人資料 ~ 照片 ContactsContract.Contacts.PHOTO_ID
要讀取聯絡人資料記得Manifest.xml中要加入
ContactPhotoActivity.java
package com.tsots.ContactPhotoActivity;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.widget.GridView;
public class ContactPhotoActivity extends Activity
{
GridView g1;
String photoId;
Bitmap photoBitmap;
List contact_name= new ArrayList();
List contact_photo= new ArrayList();
int num_contact=0;
int num_contact_photo=0;
Bitmap tmp_photoBitmap;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
g1 = (GridView) findViewById (R.id.gridview1);
Uri contacts = Contacts.CONTENT_URI;
//陣列內容: 從contact撈出有顯示名稱的資料
String[] selectNameColumn = new String[]{
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
Cursor cur = getContentResolver().query(
contacts, //要查詢的表格
selectNameColumn, //要回傳的欄位組合
null,
null,
null
);
try
{
if (cur.moveToFirst())
{
int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);
int nameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
do
{
String contactId = cur.getString(idColumn);//回傳有DISPLAY_NAME的資料,個人Device有103筆
try
{
byte[] photo = getPhoto(contactId); //只回傳有PHOTO_ID的資料,個人Device有24筆
num_contact++;
//將byte轉成Bitmap
Bitmap map = BitmapFactory.decodeByteArray(photo, 0, photo.length);
contact_name.add(num_contact + " " + String.valueOf(cur.getString(nameColumn)));
contact_photo.add(map);
}
catch(Exception e)
{
}
}while(cur.moveToNext());
PhotoAdapter adapter = new PhotoAdapter(
this,
contact_name,
contact_photo
);
g1.setNumColumns(3); //每列3筆資料
g1.setAdapter(adapter); //自訂的Adapter
}
}
finally
{
cur.close();
}
}
/*
* 這個function負責從聯絡人中撈出有PHOTO_ID的資料, 並以byte[]的型態回傳
*/
public byte[] getPhoto(String people_id)
{
byte[] contactIcon = null;
String photo_id = null;
String select_name = ContactsContract.Contacts._ID + " = " + people_id;
Cursor cur_select_name = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
null,
select_name,
null,
null
);
//會丟入103筆資料
if (cur_select_name.getCount() > 0)
{
cur_select_name.moveToFirst();
photo_id = cur_select_name.getString(cur_select_name.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
}
String[] projection = new String[] {ContactsContract.Data.DATA15};
String select_photo = ContactsContract.Data._ID + " = " + photo_id; //只抓有photo的data
//String selection = ContactsContract.Data._ID; //抓所有有名字的data, 且沒有抓到photo值
Cursor cur_select_photo = getContentResolver().query(
ContactsContract.Data.CONTENT_URI, //要查詢的表格
projection, //要回傳的欄位組合
select_photo, //符合這個限制資料的才會回傳
null, //前一個參數的參數
null //排序
);
//會丟入59筆資料
cur_select_photo.moveToFirst();
/*
* 若由DISPLAY_NAME過濾後的資料裡, 沒有聯絡人圖片的, 統一給一個圖示, 從.png裡抓
*/
if(cur_select_photo.getCount() == 0)
{
tmp_photoBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.widget_stock_addnewstock_btn_normal); //將圖檔轉成Bitmap
ByteArrayOutputStream baos = new ByteArrayOutputStream();
tmp_photoBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); //將.png的圖檔轉成Bitmap
contactIcon = baos.toByteArray();
return contactIcon;
}
else
{
//只會得到24筆資料
contactIcon = cur_select_photo.getBlob(0);
return contactIcon;
}
}
} //
2012年1月10日 星期二
圖片瀏覽 ~ GridView與Adapter的結合
GridViewActivity.java
package com.tsots.GridView_Adapter_Pic;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.Toast;
public class GridViewActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
//GridView的點選事件, 傳入int position知user點選哪一個item
gridview.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView parent, View v, int position, long id)
{
Toast.makeText(GridViewActivity.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}
}
2012年1月9日 星期一
色碼表 ~ GridView與Adapter的結合
本範例以BackgroundAdapter.java extends BaseAdapter來改變GridView的背景圖, 並以一個覆蓋全畫面的ImageView增添OnClickListener事件, 讓user可以切換色系的名稱與編碼.
另外為了讓畫面保持在橫向狀態, 必須在Manifest.xml的Activity標籤中加入android:screenOrientation="landscape"的屬性


GridViewActivity.java
package com.tsots.GridView_Adapter_Color;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.GridView;
import android.widget.ImageView;
public class GridViewActivity extends Activity
{
GridView gridview;
ImageView imageview;
String[] items;
int temp = 0;
BackgroundAdapter mygridviewadapter;
int[] color = {
R.color.darkred, R.color.crimson, R.color.red, R.color.firebrick,
R.color.purple, R.color.blueviolet, R.color.orchid, R.color.pink,
R.color.mediumvioletred, R.color.deeppink, R.color.magenta, R.color.lightcoral,
R.color.darkgreen, R.color.green, R.color.limegreen, R.color.lightgreen,
R.color.lime, R.color.lawngreen, R.color.greenyellow, R.color.paleolivine,
R.color.darkblue, R.color.blue, R.color.paleblue, R.color.lightblue,
R.color.darkaqua, R.color.aqua, R.color.paleaqua, R.color.lightaqua,
R.color.black, R.color.gray, R.color.silver, R.color.white,
R.color.darkorange, R.color.orange, R.color.paleorange, R.color.lightorange,
R.color.gold, R.color.yellow, R.color.paleyellow, R.color.lightyellow
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gridview = (GridView) findViewById (R.id.gridview);
imageview = (ImageView) findViewById (R.id.imageview);
items = getResources().getStringArray(R.array.colorname_array);
imageview.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
if (temp == 0)
{
items = getResources().getStringArray(R.array.colorcode_array);
temp = 1;
}
else
{
items = getResources().getStringArray(R.array.colorname_array);
temp = 0;
}
mygridviewadapter = new BackgroundAdapter(GridViewActivity.this, items, color);
gridview.setAdapter(mygridviewadapter);
}
});
mygridviewadapter = new BackgroundAdapter(GridViewActivity.this, items, color);
gridview.setAdapter(mygridviewadapter);
}
}
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)
新增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();
}
});
訂閱:
文章 (Atom)









