public class FavoriteActivity extends Activity implements OnNavigationListener {
public static ListView list;
public static ArrayList<FavoriteFile> arSrc;
public static FavoriteFile data;
public static FavoriteDBHelper dbHelper;
public static ListAdapter adapter;
public static String newText = "";
private ActionBar actionBar;
private ArrayList<SpinnerNavItem> navSpinner;
private TitleNavigationAdapter nadapter;
public void onCreate( final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.favorite_main);
list = (ListView) findViewById( R.id.file_list );
dbHelper = new FavoriteDBHelper(this);
arSrc = FavoriteDB.selectAllFile(dbHelper);
arSrc=new ArrayList<FavoriteFile>();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitMapData = stream.toByteArray();
// data=new FavoriteFile(0,bitMapData,"네이버","www.naver.com");
// arSrc.add(data);
// arSrc.add(new FavoriteFile(0,bitMapData,"sdfsdf","sdfsdf"));
// adapter.arSrc.add(data);
// adapter.OriginarSrc.add(0, new FavoriteFile(0,bitMapData,"sdfsdf","sdfsdf"));
// adapter.areAllItemsEnabled();
// adapter.arSrc.add(new FavoriteFile(0,bitMapData,"sdfsdf","sdfsdf"));
adapter=new ListAdapter( this, R.layout.favorite_list_view_layout,arSrc, arSrc, null );
arSrc.add(new FavoriteFile(0,bitMapData,"sdfsdf","sdfsdf"));
list.setAdapter( adapter );
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
WebViewActivity.webUrl=mData.favUrl;
Intent myIntent = new Intent(FavoriteActivity.this,WebViewActivity.class);
startActivity(myIntent);
}
});
SwipeDismissListViewTouchListener touchListener =
new SwipeDismissListViewTouchListener(list,
new SwipeDismissListViewTouchListener.DismissCallbacks() {
@Override
public boolean canDismiss(int position) {
return true;
}
@Override
public void onDismiss(ListView list, int[] reverseSortedPositions) {
for (int position : reverseSortedPositions) {
FavoriteFile mData = adapter.arSrc.get(position);
FavoriteDB.deleteFile(mData.getId(),dbHelper);
adapter.arSrc.remove(position);
}
adapter.notifyDataSetChanged();
}
});
list.setOnTouchListener(touchListener);
list.setOnScrollListener(touchListener.makeScrollListener());
}
class ListAdapter extends CursorAdapter implements Runnable {
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 int getId(int position) {
return OriginarSrc.get(position).getId();
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = Inflater.inflate(layout, parent, false);
}
Runnable start = new ListAdapter(maincon, position, OriginarSrc, OriginarSrc, mCursor);
Thread T =new Thread(start);
T.start();
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();
}
}
}
}
위의 소스코드처럼
데이터베이스를 이용한 커스텀 리스트뷰입니다. 그런데 데이터추가에 상관없이 항상 있어야하는 커스텀 리스트뷰를 배치해주고 싶습니다.
제 생각에는 리스트뷰에 뿌려줄 데이터들의 집합이 arSrc라는 변수라서 arSrc.add(new FavoriteFile(0,"이름","www.naver.com"));
이렇게 하면 되긴 되는데 기존에 있던 데이터는 다 지워지고 저 문장 하나만 뜹니다.
데이터에 상관없으니깐 adapter에 추가 시켜도 될꺼 같은데 adapter에는 추가하는 함수가 없더라구요
어떻게해야 추가를 안해도 항상 보이는 커스텀 리스트뷰를 만들 수 있을까요 ㅠ