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

ListView에서 아이템 클릭이 안되요...

0 추천
package kr.com.ssu.faromi;

import java.util.ArrayList;

import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ToggleButton;

public class DetailScheduleActivity extends ListActivity {
 private int i;
 private ArrayList<ScheduleDTO> list;
 private DetailScheduleAdapter adapter;
 private ListView view;
 private TextView tviewDPlace;
 private TextView tviewAPlace;
 private TextView tviewDTime;
 private TextView tviewATime;
 private ToggleButton togglebtnAlarm;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  setContentView(R.layout.detail_schedule_layout);
  
  schedNo = getIntent().getIntExtra("schedNo", -1);
  list = new ArrayList<ScheduleDTO>();
  view = getListView();
  view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
  view.setDivider(new ColorDrawable(Color.BLACK));
  view.setDividerHeight(1);
     
  adapter = new DetailScheduleAdapter(this, R.layout.detail_schedule_layout, list);
  setListAdapter(adapter);
  
  view.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> adapterView, View v, int position, long id) {
       // TODO Auto-generated method stub

      Log.i("T.T", "여기안옴");
   }
  });
 }
 
 private class DetailScheduleAdapter extends ArrayAdapter<ScheduleDTO> {
  private ArrayList<ScheduleDTO> list;

  public DetailScheduleAdapter(Context context, int textViewResourceId,
    ArrayList<ScheduleDTO> list) {
   super(context, textViewResourceId, list);
   this.list = list;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   View v = convertView;
   if (v == null) {
    LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.detail_schedule_view, null);
   }
   dto = list.get(position);
   if (dto != null) {
    tviewDPlace = (TextView) v.findViewById(R.id.tviewDPlace);
    tviewAPlace = (TextView) v.findViewById(R.id.tviewAPlace);
    tviewDPlace.setSelected(true);
    tviewAPlace.setSelected(true);
    tviewDTime = (TextView) v.findViewById(R.id.tviewDTime);
    tviewATime = (TextView) v.findViewById(R.id.tviewATime);
    togglebtnAlarm = (ToggleButton) v.findViewById(R.id.togglebtnAlarm);
    togglebtnAlarm.setOnCheckedChangeListener(new OnCheckedChangeListener() {
     @Override
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
      // TODO Auto-generated method stub
      if(isChecked){
       togglebtnAlarm.setBackgroundDrawable(getResources().getDrawable(R.drawable.alarmon));
       System.out.println("켜짐");
      }
      else{
       togglebtnAlarm.setBackgroundDrawable(getResources().getDrawable(R.drawable.alarmoff));
       System.out.println("꺼짐");
      }
     }
    });
    
    if (tviewDPlace != null) {
     tviewDPlace.setText(dto.getdPlace());
    }
    if (tviewAPlace != null) {
     tviewAPlace.setText(dto.getaPlace());
    }
    if (tviewDTime != null) {
     tviewDTime.setText(dto.getdTime());
    }
    if (tviewATime != null) {
     tviewATime.setText(dto.getaTime());
    }
   }
   return v;
  }
 }
}

 

불필요한 코드는 빼서 머가 없어서 오류가 나는건 아니구요..

오류는 안납니다.

중요한건 안드로이드에서 제공하는 ListActivity 상속 받아서 ListView 사용했구요..

xml에서도  android:id="@android:id/list" 사용했습니다..

이렇게 똑같은 형태로 다른 액티비티에서도 리스트뷰를 사용했는데

다 클릭이 되는데 이거만 안됩니다...왜그럴까요..

(프로젝트 클린도 해봤습니다,..)
김청라 (210 포인트) 님이 2013년 6월 27일 질문

2개의 답변

0 추천
소스상에 문제는 없어 보입니다만....

혹... 다른곳에서 포커스를 가져가는것은 아닌지 의심이 됩니다....
ThisPlus (46,920 포인트) 님이 2013년 6월 27일 답변
ㅜㅜ 힌트를 드렸으나 못찾으시는 것 같아 답변드립니다.
토글버튼이 문제입니다.
리스트에 버튼류의 위젯이 위치할경우 포커스를 버튼류 위젯에게 빼앗겨 아이템클릭리스너가 작동 하지 않습니다.
해결방법은 아이템 최상위 레이아웃에 클릭리스너를 달고 아이템클릭리스너에서 할 작업을 하시면 됩니다..
0 추천

고대로 복사해서 테스트 해보았으나 잘 되네요

view.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
Log.i("TAG", "onItemClick");
 
}
});
 
위부분을 지우고 다시 생성해보세요
Gradler (109,780 포인트) 님이 2013년 6월 27일 답변
지우고 다시 생성해봤는데 왜 안될까요 ㅠㅠㅠ
...