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

안드로이드 그리드뷰 클릭이벤트

0 추천

group_detail.xml 그리드 뷰가 선언된 레이아웃

 <LinearLayout 

                android:layout_width="match_parent"

                android:layout_height="match_parent"

                android:layout_weight="1"

                >

                

                <GridView

                    android:id="@+id/group_grid"

                    android:layout_width="match_parent"

                    android:layout_height="match_parent"

                    android:columnWidth="100dp"

                    android:horizontalSpacing="10dp"

                    android:numColumns="2"

                    android:stretchMode="columnWidth"

                    android:verticalSpacing="10dp" >

                </GridView>

                

            </LinearLayout>

 

group_grid_view.xml 그리드뷰에 넣을 버튼 

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <Button

        android:id="@+id/group_grid_btn"

        android:layout_width="200px"

        android:layout_height="90px"

        android:layout_gravity="center"

         />

 

</LinearLayout>

 

Activity에서 

BtnAdapter adapter = new BtnAdapter(getApplicationContext(), R.layout.group_grid_view, btnName);

GridView gv = (GridView)findViewById(R.id.group_grid);

gv.setAdapter(adapter);

 

객체화 해주고 adapter 걸어줬습니다.

 

@Override

public View getView(int position, View convertView, ViewGroup parent) {

// TODO Auto-generated method stub

if(convertView == null)

convertView = inf.inflate(layout, null);

Button btn = (Button)convertView.findViewById(R.id.group_grid_btn);

btn.setBackgroundResource(btnName[position]);

btn.setTag(position);

btn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

SoundManager.getInstance().soundEffectPlay();

if(!btnflag){

v.setSelected(true);

btnflag = true;

}else{

v.setSelected(false);

btnflag = false;

}

}

});

return convertView;

}

 

버튼이 총 20개 생성되는데요 배열에 이미지를 담아서.

각버튼 클릭할때마다 selector로 이미지 바뀌고 라디오 버튼처럼 중복 클릭이 안되게
예를 들면 a,b 버튼 이있는데 

a클릭(이미지바뀜) b그대로

b클릭(이미지 바뀜) a(이미지 원래대로) 

이런식으로요

아직 안드로이드 초보라서 많은 도움 주시면 감사하겠습니다.

안드로이드초오보 님이 2018년 4월 11일 질문

1개의 답변

0 추천
btn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

SoundManager.getInstance().soundEffectPlay();

v.setSelected(v.isSelected());

}

});
poporo (3,960 포인트) 님이 2018년 4월 11일 답변
isSelected로 해버리면 첫 실행시 false가 들어가기 때문에 계속 false인 상태 아닌가요
v.setSelected(!v.isSelected());
로 해주세요
일단 친절한 답변 감사합니다. 버튼 클릭하는 부분은 해결했습니다. 다만
윗 글처럼 20개 버튼이 생기고 제가 btn.setTag(position)으로 각 버튼에 0~19까지 태그를 걸어줬습니다. 중복 선택 안되게 하고싶은데
for(int i=0; i<=btnName.length; i++){
    if(String.valueOf(i).equals(v.getTag().toString()) ){
        v.setSelected(!v.isSelected());
    }else{
        Button btn1 = (Button)v.findViewWithTag(String.valueOf(i));
        btn1.setSelected(!v.isSelected());
    }
}
이렇게 했더니 btn1.setSelected(!v.isSelected()); 여기서 nullpoint 에러가 나네요.
중복선택 안하게 하려면 뭘 비교해야될까요.
...