2013-07-19 6 views
1

여기 내 어댑터에서의 getView 함수이다 :왜 내 ListView 항목을 클릭 할 수 있습니까?

public View getView(int position, View convertView, ViewGroup parent) { 
     final ResultItem item; 
     final TextView fn; 
     final View rd; 
     item = list.get(position); 

     convertView = new RelativeLayout(mContext); 

     if (position % 2 == 0) { 
      convertView.setBackgroundColor(COLOR_RESULT_ENTRY1); 
     } else { 
      convertView.setBackgroundColor(COLOR_RESULT_ENTRY2); 
     } 

     convertView.setMinimumHeight(ENTRY_MINIMUM_HEIGHT); 

     layoutEntry(convertView, parent, RelativeLayout.LayoutParams.MATCH_PARENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT); 

     fn = new TextView(mContext); 
     fn.setTextSize(GENERIC_TEXT_SIZE); 
     fn.setText(item.fieldName); 
     layoutItem(fn, (int) (parent.getWidth() * FIELD_NAME_WIDTH), RelativeLayout.LayoutParams.WRAP_CONTENT, 0, 0); 

     if (item.type == TYPE1) { 
      rd = new EditText(mContext); 
      ((EditText) rd).setTextSize(GENERIC_TEXT_SIZE); 
      ((EditText) rd).setText((String) item.retrievedData); 
      ((EditText) rd).setBackgroundDrawable(null); 

      rd.setOnKeyListener(new OnKeyListener() { 

       @Override 
       public boolean onKey(View v, int keyCode, KeyEvent event) { 

        if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { 
         item.retrievedData = ((EditText) rd).getText().toString(); 
        } 

        return false; 
       } 

      }); 

     } else if (item.type == TYPE2) { 
      rd = new TextView(mContext); 
      ((TextView) rd).setTextSize(GENERIC_TEXT_SIZE); 
      ((TextView) rd).setText((String) item.retrievedData); 

      rd.setOnLongClickListener(new OnLongClickListener() { 

       @Override 
       public boolean onLongClick(View v) { 
        if (((TextView) rd).getText().toString().equals(ResultItem.checked)) { 
         ((TextView) rd).setText(ResultItem.unchecked); 
         item.retrievedData = ResultItem.unchecked; 
        } else { 
         ((TextView) rd).setText(ResultItem.checked); 
         item.retrievedData = ResultItem.checked; 
        } 

        return true; 
       } 

      }); 

     } else if (item.type == TYPE3) { 
      rd = new TextView(mContext); 
      ((TextView) rd).setTextSize(GENERIC_TEXT_SIZE); 
      ((TextView) rd).setText((String) item.retrievedData); 
     } else if (item.type == TYPE4) { 
      rd = new ImageView(mContext); 
      ((ImageView) rd).setImageBitmap((Bitmap) item.retrievedData); 
     } else { 
      rd = new TextView(mContext); 
      ((TextView) rd).setText((String) item.retrievedData); 
     } 

     layoutItem(rd, (int) (parent.getWidth() * (1.0f - FIELD_NAME_WIDTH)), 
       RelativeLayout.LayoutParams.WRAP_CONTENT, (int) (parent.getWidth() * FIELD_NAME_WIDTH), 0); 

     ((RelativeLayout) convertView).addView(fn); 
     ((RelativeLayout) convertView).addView(rd); 

     return convertView; 
    } 

목록 내가 ListView를 입고 할 데이터를 보유하고 ArrayList에 있습니다. LayoutEntry 및 LayoutItem은 뷰 너비, 높이 및 위치를 설정하는 두 가지 기능입니다. 기본적으로 항목의 유형 필드를 기반으로 반환 할 항목의 네 가지 유형이 있습니다.

TYPE2 및 TYPE4에 해당하는 목록 항목을 클릭하면 항목의 배경색이 바뀐 것입니다. 사실 그것은 클릭 효과를 얻고 있습니다. 그러나 TYPE4의 경우 clicklistener를 구현하지 않았으며 TYPE2의 경우 리스너는 convertView가 아닌 ​​rd에 대한 것입니다. TYPE1 및 TYPE3에 의해 반환 된 항목을 클릭하면 아무 일도 일어나지 않습니다. 이는 내가 예상 한 것입니다. 왜 이상한 일이 TYPE2 및 TYPE4에서 발생합니까?

답변

0

필자는 사용자 정의 ListView를 가지고 있으므로 목록 항목을 설명하는 사용자 지정 XML을 가져야합니다. 나는 당신이 당신의 XML에 더 가까이 다가 갈 필요가 있다고 생각한다.

관련 문제