위 그림처럼 '나'부터'하'까지의 커스텀 리스트뷰를 저장했는데요
'나'를 클릭하면 toast로 출력했을때 포지션값이-0///커서ID가-2 로 찍힙니다
그리고 '하'를 클릭하고 toast로 출력했을때 포지션값이-12//커서ID가-14로 잘 찍히는데요
위에 그림처럼 getfilter로 검색결과를 뿌려줘서 다시 저 '하'를 클릭하면
toast로 출력했을때 포지션값이-0///커서ID가-2 로 찍힙니다ㅠ
toast로 출력했을때 커서ID가-14로 찍히게 하고 싶은데ㅠ
커스텀 리스트를 클릭할때는 저기 써져있는 url주소로 잘 넘어가거든요?근데 id 값만 잘 설정이 안되네요ㅠ
아래는 FavoriteActivity입니다
//이건 캡쳐화면에 보여지는 엑티비티입니다
public void onCreate( final Bundle savedInstanceState) {
list = (ListView) findViewById( R.id.file_list );
dbHelper = new FavoriteDBHelper(this);
arSrc = FavoriteDB.selectAllFile(dbHelper);
adapter=new ListAdapter( this, R.layout.favorite_list_view_layout,arSrc, arSrc, null );
list.setAdapter( adapter );
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
Cursor cs = null;
SQLiteDatabase db = dbHelper.getReadableDatabase();
String sq = "SELECT * FROM file2";
cs = db.rawQuery( sq , null );
FavoriteFile mData = adapter.arSrc.get(position);
cs.moveToPosition(position+1);
Toast.makeText(FavoriteActivity.this,"<adapterPosition-"+adapter.getItemId(position)+">"+"<CursorId-"+cs.getInt(0)+">"+id, Toast.LENGTH_SHORT).show();
WebViewActivity.webUrl=mData.favUrl;
Intent myIntent = new Intent(FavoriteActivity.this,WebViewActivity.class);
startActivity(myIntent);
}
});
//아래는 위 엑티비티의 리스트어댑터와 getFilter해서 화면에 다시 뿌려주는 소스입니다
class ListAdapter extends CursorAdapter {
Context maincon;
LayoutInflater Inflater;
ArrayList<FavoriteFile> arSrc = new ArrayList<FavoriteFile>();
ArrayList<FavoriteFile> OriginarSrc = arSrc;
private Filter ListFilter;
int layout;
public ListAdapter(Context context, int layout,ArrayList<FavoriteFile> OriginarSrc, ArrayList<FavoriteFile> arSrc, Cursor cs) {
super(context, cs, layout);
this.maincon = context;
this.Inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.arSrc = arSrc;
this.layout = layout;
}
public int getCount() {
return arSrc.size();
}
public String getItem(int position) {
return arSrc.get(position).getFileName();
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = Inflater.inflate(layout, parent, false);
}
byte[] outImage = arSrc.get(position).getIcon();
ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage);
Bitmap theImage = BitmapFactory.decodeStream(imageStream);
ImageView img = (ImageView) convertView.findViewById(R.id.filelist_img);
img.setImageBitmap(theImage);
TextView textFilename = (TextView) convertView
.findViewById(R.id.filelist_filename);
textFilename.setText(arSrc.get(position).getFileName());
TextView textFilesize = (TextView) convertView
.findViewById(R.id.filelist_filesize);
textFilesize.setText(arSrc.get(position).getFavUrl() );
return convertView;
}
public Filter getFilter() {
if (ListFilter == null)
ListFilter = new ListFilter();
return ListFilter;
}
private class ListFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint == null || constraint.length() == 0) {
results.values = OriginarSrc;
results.count = OriginarSrc.size();
}
else {
// We perform filtering operation
ArrayList<FavoriteFile> nListDataList = new ArrayList<FavoriteFile>();
for (FavoriteFile p : arSrc) {
if (p.getFileName().toUpperCase().indexOf( constraint.toString().toUpperCase() ) >= 0 )
nListDataList.add(p);
//System.out.println(p.toString());
}
results.values = nListDataList;
results.count = nListDataList.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
// Now we have to inform the adapter about the new list filtered
if (results.count == 0){
notifyDataSetInvalidated();
arSrc = FavoriteDB.selectAllFile(FavoriteActivity.dbHelper);
FavoriteActivity.list.setAdapter( FavoriteActivity.adapter );
}
else {
arSrc = (ArrayList<FavoriteFile>) results.values;
notifyDataSetChanged();
}
}
}
그리고 아래 코드는 SQlite에 데이터를 저장하는 소스입니다
public void addList(View view, final byte[] byteArray) {
final EditText edit = (EditText) d.findViewById(R.id.editTextList);
Button b = (Button) d.findViewById(R.id.addBtn);
d.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String ListName = edit.getText().toString();
String FavUrl=webView1.getUrl();
Cursor cs = null;
SQLiteDatabase db = FavoriteActivity.dbHelper.getReadableDatabase();
String sq = "SELECT * FROM file2";
cs = db.rawQuery( sq , null );
FavoriteFile item1= new FavoriteFile( byteArray, ListName, FavUrl );
FavoriteDB.insertFile(item1, FavoriteActivity.dbHelper);
Toast.makeText(WebViewActivity.this,ListName+"가 추가되었습니다", Toast.LENGTH_SHORT).show();
d.dismiss();
}
});
d.show();
}
아래는 FavoriteDB입니다다
public class FavoriteDB {
public static ArrayList<FavoriteFile> selectAllFile( FavoriteDBHelper dbHelper ){
ArrayList<FavoriteFile> list = null;
Cursor cs = null;
SQLiteDatabase db = dbHelper.getReadableDatabase();
list = new ArrayList<FavoriteFile>();
String sql = "SELECT * FROM file2";
cs = db.rawQuery( sql , null );
if(cs!=null&&cs.getCount()!=0)
{
cs.moveToFirst();
}
while (cs.moveToNext()) {
FavoriteFile item = new FavoriteFile( cs.getBlob(1), cs.getString(2), cs.getString(3) + "" );
list.add(item);
}
cs.close();
db.close();
return list;
}
public static void insertFile( FavoriteFile vo, FavoriteDBHelper dbHelper ){
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "INSERT INTO file2 (IMAGE,filename,URL)VALUES (?,?,?);";
SQLiteStatement smt = db.compileStatement(sql);
smt.bindBlob(1, vo.getIcon());
smt.bindString(2, vo.getFileName());
smt.bindString(3, vo.getFavUrl());
smt.executeInsert();
Log.i("mylog", sql.toString());
//db.execSQL( sql.toString() );
db.close();
}
}
아래는 FavoriteDBHelper입니다
public class FavoriteDBHelper extends SQLiteOpenHelper {
public FavoriteDBHelper( Context context ){
super( context, "file2.sqlite", null, 1 );
Log.i("mylog", "FavoriteDBHelper");
}
public void onCreate( SQLiteDatabase db ){
String sql;
sql = "create table file2 ( _id integer primary key autoincrement,"
+ "IMAGE BLOB,"
+ "FILENAME TEXT,"
+ "URL TEXT );";
Log.i("mylog", sql );
db.execSQL( sql );
}
}
아래는 FavoriteFile입니다(다 안올라가서 사진으로 넣겠습니다 ㅜㅜㅜㅜ)
