안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요. 제가 개인프로젝트로 시간표를 진행중입니다.
그림에 나와있는 시간표가 제가 만들고 있는 시간표 UI인데요.
일단 초기에 틀을 잡는 단계라 셀을 클릭하면, 제가 정해둔 문자열(알고리즘)이 셀에 출력이 되고,
셀의 배경색을 빨간색으로 변환하려 하는데, 잘 안됩니다.
그림에서 보시는 것처럼 (1)특정 셀을 누르면 문자열은 제가 누른셀에 잘 출력이 되는데, 배경색이
엉뚱한 셀에 채워집니다. 또한 그림에서 보시는 상태에서 (1)의 셀을 한번 더 클릭하면 그제서야 (1)의
셀에 배경색이 채워집니다만, 다른 엉뚱한 셀에 또 배경색이 채워집니다.
getchildat(position)으로 해당 아이템뷰를 받아서 배경색을 채우는것인데, 제 생각으로는 문제가 없다고 생각
되는데 도대체 무엇이 문제일까요?ㅠㅠ 염치없지만 여러분들의 도움이 필요합니다.
소스코드 첨부합니다.
메인 액티비티 소스코드입니다.
package wony.Toolztimetable;
import java.util.ArrayList;
import android.R;
import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class ToolztimetableActivity extends Activity implements OnItemClickListener{
private GridView maingrid;
private ArrayList<String> Time_day;
private MyAdapter aa;
private TextView hh;
private ArrayList<String> Time_day;
private MyAdapter aa;
private TextView hh;
@Override
public void onCreate(Bundle savedInstanceState) {
int i,k=8;;
super.onCreate(savedInstanceState);
setContentView(wony.Toolztimetable.R.layout.main);
maingrid = (GridView)findViewById(wony.Toolztimetable.R.id.Gridmain);
maingrid.setOnItemClickListener(this);
maingrid = (GridView)findViewById(wony.Toolztimetable.R.id.Gridmain);
maingrid.setOnItemClickListener(this);
Time_day = new ArrayList<String>();
Time_day.add(0,"");
Time_day.add(1,"월");
Time_day.add(2,"화");
Time_day.add(3,"수");
Time_day.add(4,"목");
Time_day.add(5,"금");
Time_day.add(6,"토");
Time_day.add(7,"일");
for(i=8;i<144;i++){
if(i%8==0){
Time_day.add(i,Integer.toString(k)+":00\n"+Integer.toString(++k)+":00");
}
else{
Time_day.add(i,"");
}
else{
Time_day.add(i,"");
}
}
int resID = wony.Toolztimetable.R.layout.item;
int resID = wony.Toolztimetable.R.layout.item;
aa = new MyAdapter(this,resID,Time_day);
maingrid.setAdapter(aa);
maingrid.setAdapter(aa);
}
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long arg3) {
public void onItemClick(AdapterView<?> parent, View v, int position, long arg3) {
//hh = (LinearLayout)v.findViewById(R.id.item_backgorund);
int pos = position;
if(pos%8==0 || pos<8){
v.setClickable(false);
}
v.setClickable(false);
}
//hh = (TextView)v.findViewById(R.id.item_text);
//Log.i("view",hh.toString());
//LinearLayout qq = (LinearLayout)v.findViewById(R.id.item_backgorund);
//hh.setText("알고리즘");
Time_day.set(pos, "알고리즘");
aa.notifyDataSetChanged();
Time_day.set(pos, "알고리즘");
aa.notifyDataSetChanged();
View temp =parent.getChildAt(pos);
temp.setBackgroundResource(wony.Toolztimetable.R.color.red);
Rect r = new Rect();
temp.getGlobalVisibleRect(r);
int top = r.top;
int left = r.left;
int bottom = r.bottom;
int right = r.right;
Log.v("bbong", "top : " + top + "\tleft : " + left + "\tbottom : " + bottom + "\tright : " + right);
temp.setBackgroundResource(wony.Toolztimetable.R.color.red);
Rect r = new Rect();
temp.getGlobalVisibleRect(r);
int top = r.top;
int left = r.left;
int bottom = r.bottom;
int right = r.right;
Log.v("bbong", "top : " + top + "\tleft : " + left + "\tbottom : " + bottom + "\tright : " + right);
}
}
class MyAdapter extends BaseAdapter {
Context bb;
LayoutInflater Inflater;
ArrayList<String> Time_day2;
int layout;
public MyAdapter(Context context, int layout1, ArrayList<String> Timeday){
bb = context;
Inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Time_day2 = Timeday;
layout = layout1;
}
public int getCount(){
return Time_day2.size();
}
return Time_day2.size();
}
public String getItem(int position) {
return Time_day2.get(position);
}
return Time_day2.get(position);
}
public long getItemid(int position) {
return position;
return position;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
public View getView(int position,View convertView, ViewGroup parent) {
final int pos = position;
if(convertView == null) {
convertView = Inflater.inflate(layout,parent,false);
}
TextView aa = (TextView)convertView.findViewById(wony.Toolztimetable.R.id.item_text);
//LinearLayout ss = (LinearLayout)convertView.findViewById(wony.Toolztimetable.R.id.item_backgorund);
//LinearLayout abc = (LinearLayout)convertView.findViewById(R.id.item_backgorund);
if(position%8==0 || position > 7){
aa.setTextSize(9);
convertView = Inflater.inflate(layout,parent,false);
}
TextView aa = (TextView)convertView.findViewById(wony.Toolztimetable.R.id.item_text);
//LinearLayout ss = (LinearLayout)convertView.findViewById(wony.Toolztimetable.R.id.item_backgorund);
//LinearLayout abc = (LinearLayout)convertView.findViewById(R.id.item_backgorund);
if(position%8==0 || position > 7){
aa.setTextSize(9);
}
else{
aa.setTextSize(14);
else{
aa.setTextSize(14);
}
aa.setText(Time_day2.get(position));
return convertView;
aa.setText(Time_day2.get(position));
return convertView;
}
}
}
그리드뷰 아이템레이아웃입니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/item_backgorund"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="40dp"
android:layout_height="33dp"
android:background="@drawable/show"
android:orientation="vertical">
<TextView
android:textSize="13sp"
android:id="@+id/item_text"
android:gravity="center"
android:paddingLeft="0dp"
android:paddingTop="0dp"
android:textColor="#000000"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:background="@android:drawable/list_selector_background" >
</TextView>
</LinearLayout>
android:id="@+id/item_backgorund"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="40dp"
android:layout_height="33dp"
android:background="@drawable/show"
android:orientation="vertical">
<TextView
android:textSize="13sp"
android:id="@+id/item_text"
android:gravity="center"
android:paddingLeft="0dp"
android:paddingTop="0dp"
android:textColor="#000000"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:background="@android:drawable/list_selector_background" >
</TextView>
</LinearLayout>
메인 레이아웃입니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<GridView
android:listSelector="@drawable/selector"
android:numColumns="8"
android:layout_width="320dp"
android:stretchMode="columnWidth"
android:layout_marginTop="3dp"
android:id="@+id/Gridmain"
android:layout_height="540dp"/>
</LinearLayout>
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<GridView
android:listSelector="@drawable/selector"
android:numColumns="8"
android:layout_width="320dp"
android:stretchMode="columnWidth"
android:layout_marginTop="3dp"
android:id="@+id/Gridmain"
android:layout_height="540dp"/>
</LinearLayout>




격자는 나인패치 드로어블을 이용하여 표현하였습니다.