마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Adapter와 SQL 쿼리에 대한 질문.

0 추천

달력구성에서의 질문입니다..

 

	public CalendarAdapter(Context c, GregorianCalendar monthCalendar) {
		CalendarAdapter.dayString = new ArrayList<String>();
		Locale.setDefault(Locale.KOREA);
		month = monthCalendar;
		selectedDate = (GregorianCalendar) monthCalendar.clone();
		mContext = c;
		month.set(GregorianCalendar.DAY_OF_MONTH, 1);
		this.items = new ArrayList<String>();
		df = new SimpleDateFormat("yyyy-MM-dd", Locale.KOREA);
		curentDateString = df.format(selectedDate.getTime());
		refreshDays();
		
	}

	public void setItems(ArrayList<String> items) {
		for (int i = 0; i != items.size(); i++) {
			if (items.get(i).length() == 1) {
				items.set(i, "0" + items.get(i));
			}
		}
		this.items = items;
	}

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

	public Object getItem(int position) {
		return dayString.get(position);
	}

	public long getItemId(int position) {
		return 0;
	}

	// create a new view for each item referenced by the Adapter
	public View getView(int position, View convertView, ViewGroup parent) {
		View v = convertView;
		
		if (convertView == null) { // if it's not recycled, initialize some
									// attributes
			LayoutInflater vi = (LayoutInflater) mContext
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			v = vi.inflate(R.layout.calendar_item, null);
			
		}
		dayView = (TextView) v.findViewById(R.id.date);
		// separates daystring into parts.
		String[] separatedTime = dayString.get(position).split("-");
		// taking last part of date. ie; 2 from 2012-12-02
		String gridvalue = separatedTime[2].replaceFirst("^0*", "");//날짜만 가져오는 부분 [2] 이부분이.
		// checking whether the day is in current month or not.
		if ((Integer.parseInt(gridvalue) > 1) && (position < firstDay)) {//1일 전의(전달의 마지막일들 예]29,30,31)
			// setting offdays to white color.
			dayView.setTextColor(Color.WHITE);
			dayView.setClickable(false);
			dayView.setFocusable(false);
		} else if ((Integer.parseInt(gridvalue) < 7) && (position > 28)) {
			dayView.setTextColor(Color.WHITE);
			dayView.setClickable(false);
			dayView.setFocusable(false);
		} else {
			// setting curent month's days in black color.
			dayView.setTextColor(Color.BLACK);
		}

		if (dayString.get(position).equals(curentDateString)) {
			setSelected(v);
			previousView = v;
		} else {
			v.setBackgroundResource(R.drawable.list_item_background);
		}
		dayView.setText(gridvalue);

		// create date string for comparison
		String date = dayString.get(position);

		if (date.length() == 1) {
			date = "0" + date;
		}
		String monthStr = "" + (month.get(GregorianCalendar.MONTH) + 1);
		if (monthStr.length() == 1) {
			monthStr = "0" + monthStr;
		}
		
		
		//////////////////////////////////////////
		
		SQLiteDatabase db = mDBHelper.getReadableDatabase();
		
		cursor = db.rawQuery("SELECT * FROM today WHERE date = '" + dayString.get(position) + "'",null);
		
		ddd = cursor.getString(1);
	ImageView iw2 = (ImageView) v.findViewById(R.id.date_icon2);
	if(ddd !=null){
		
			iw2.setVisibility(View.VISIBLE);
		}else{
			iw2.setVisibility(View.INVISIBLE);

		}
		cursor.close();
		mDBHelper.close();
		

		//////////////////////
		
		
		
		
		// show icon if date is not empty and it exists in the items array------일정이 있을때 아이콘(점) 표시
		ImageView iw = (ImageView) v.findViewById(R.id.date_icon);
		if (date.length() > 0 && items != null && items.contains(date) ) {
			iw.setVisibility(View.VISIBLE);
		} else {
			iw.setVisibility(View.INVISIBLE);
		}
		return v;
		
	}

 

현재 달력 각 날짜의 adapter 부분인데요,

달력 전체부분 아래에 listview로는 각 날짜에 대한 일정을 추가하여 볼 수 있는데,

현재 각 해당 부분에 날짜 아래에 이미지를 일정이 있을때는 표시, 없을때는 사라지게 하려고 하고있습니다.

근데 쿼리 부분 수행을 하기가 어려워서요.(하이라이트 부분)

지금은 보시는바와 같이 해당 날짜를 찾아서 그 부분의 제목(getString(1)) 이 null이 아니면 보이게 하도록 나름 했는데..

 

dayString 부분을 잘못한 것 같기도 하구요.

 

public class MyDBHelper extends SQLiteOpenHelper {

	public MyDBHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		db.execSQL("CREATE TABLE today(_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, date TEXT, time TEXT, memo TEXT);");
		db.execSQL("INSERT INTO today VALUES(null, 'title', '2014/7/18', '11:00', 'memo');");
	}

	
	
	
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		db.execSQL("DROP TABLE IF EXIST today;");
		onCreate(db);

	}

}

이 부분이 일정에 대한 db 부분이구요.

 

쿼리를 adapter 안에서 어떤식으로 구현하여야 하는지 감이 잡히지 않네요..

도움 부탁드리겠습니다.

발삼체다 (650 포인트) 님이 2015년 2월 23일 질문
무엇이 잘못되었는지 글 색깔을 하이라이트 넣으니 <span> 이 뜨네요.
하이라이트는 <span> 부터 </span> 입니다.

1개의 답변

0 추천
혹시나 필요하실지도 몰라서 DB예제 링크만 남깁니다.

https://github.com/susemi99/TestDBListView
쎄미 (162,410 포인트) 님이 2015년 2월 25일 답변
...