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

listview 특정 항목 터치 방지하기.

0 추천

 


 private class DataAdapter extends ArrayAdapter<CData> {

  private LayoutInflater mInflater;

  public DataAdapter(Context context, ArrayList<CData> object) {


   super(context, 0, object);
   mInflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  }
  @Override
  public View getView(int position, View v, ViewGroup parent) {
   View view = null;
   if (v == null) {
    view = mInflater.inflate(R.layout.addtime_listitem, null);
   } else {

    view = v;
   }

   final CData data = this.getItem(position);

   if (data != null) {
    TextView add_s_code_tv = (TextView) view
      .findViewById(R.id.add_s_code);
    TextView add_s_major_grade_class_tv = (TextView) view
      .findViewById(R.id.add_s_major);
    TextView add_s_name_tv = (TextView) view
      .findViewById(R.id.add_s_name);
    TextView add_s_proname = (TextView) view
      .findViewById(R.id.add_s_proname);
    TextView add_s_day_time = (TextView) view
      .findViewById(R.id.add_s_day);
    TextView add_s_place = (TextView) view
      .findViewById(R.id.add_s_place);
             TextView addPossible = (TextView) view
      .findViewById(R.id.addpossible);

   add_s_code_tv.setText(data.getS_code());
           add_s_major_grade_class_tv.setText(data.getS_major()
     + data.getS_grade() + data.getS_classs());
   add_s_name_tv.setText(data.getS_name());
   add_s_proname.setText(data.getS_proname());
   add_s_day_time.setText(data.getS_day() + data.getS_time());
                           add_s_place.setText(data.getS_place());
   addPossible.setText(data.getS_possible());

   if ((addPossible.getText().toString() == "수강불가")) {
     // item 뷰의 터치 이벤트를 설정합니다.
  view.setOnTouchListener(new View.OnTouchListener() {
   public boolean onTouch(View v, MotionEvent event) {

    // 여기서 이벤트를 막습니다.
    return true;
      }
     });
    }

   }

   return view;

  }

 }

  class CData {

 

 데이터 반환메소드들 포함

  public String getS_possible() {
   boolean possible = false;

   for (int a = 0; a < days.length; a++) {

    if (days[a].equals(getS_day())) {
      조건

      possible = true;
     }

     if (possible == true) {
      ab = "수강불가";
     } else {
      ab = "";
     }
    }
   }

   return ab;

  }
 }

 }}

 

안드로이드를 배우기 시작한지 얼마안된 학생입니다.

어댑터 연결후 리스트뷰 특정항목을 클릭 하면 다른액티비티로 데이터를 보내는 기능인데요
여기서 리스트뷰 안에 있는 텍스트 뷰에 "수강불가"가 있으면 클릭을 방지하려고
인터넷에서 찾아가며 방법을 알아냈는데요.

 if ((addPossible.getText().toString() == "수강불가")) {
// item 뷰의 터치 이벤트를 설정합니다.
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {

// 여기서 이벤트를 막습니다.
return true;
}
});
}

 

 

여기서 조건을 주고 true 를 반환하면 클릭이 안되는걸로 알고있는데
막상 핸드폰에서 실행시켜보면 어떤 항목은 터치가 되고 어떤항목은 안되고..
어떠한 규칙이 없이 수강불가라는 항목도 터치가되서 다른액티비티로 데이터가 넘어가네요..
조건을 잘못준건지.조건을 잘못줬으면 다 터치가 안되거나 다 터치가 되야하는것 같은데 그런것도 아니고 ㅠ
아니면 제가 지금 잘못뭔가를 잘못한건지.. ㅜㅜ
고수님들 초보자를 위해 답변부탁드려요.

 

익명사용자 님이 2013년 5월 11일 질문

1개의 답변

0 추천

문자열은 == 이 아니라 equals 의 obj 형태로 제어를 해주셔야합니다.

 

((addPossible.getText().toString() == "수강불가")) 이부분을 boolean 타입으로 수강불가인것을 따로 구분 지어주셔보세요 아니면 문자열 비교라면

toString().equals("수강불가") 이렇게 바꿔주시면 될거 같구요

아니면 위의방식말구 OnItemClickListener 을 상속받아

 

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
 
if (addPossible.getText().toString().equals("수강불가")) {
수강불가일때 이벤트
} else {
수강 가능일때 이벤트
startActivity(intent);
}
}

다른게 더 없다면 이렇게 해결해주시는것도 좋은 방법인거 같습니다.

홍그리 (1,560 포인트) 님이 2013년 5월 13일 답변
...