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

switch 처리 , if 처리 어떤식으로 해야할까요..

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

  final ViewHolder vh;
  final int pos = position;
  int point, cash, temp3, totalCost;
  boolean[] tld_val = new boolean[7];
  double temp;
  String temp2;
  Intent intent = ((Activity) mContext).getIntent();

  tld = intent.getExtras().getString("Value");
  if (convertView == null) {

   LayoutInflater Inflater = (LayoutInflater) mContext
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   convertView = Inflater.inflate(R.layout.point_item_layout, parent,
     false);

   vh = new ViewHolder();

   vh.mTextView = (TextView) convertView
     .findViewById(R.id.coupon_text);
   vh.mCheckBox = (CheckBox) convertView
     .findViewById(R.id.coupon_checkbtn);

   vh.mCheckBox.setId(position);

   convertView.setTag(vh);
  } else {
   vh = (ViewHolder) convertView.getTag();
  }
  
  if (!mDataArr.get(pos).mName.contains(".")) {
   vh.mCheckBox.setEnabled(true); 
   vh.mTextView.setTextColor(Color.RED);
  }
  if (tld.contains("com")){
   if(mDataArr.get(pos).mName.contains("com")){
    vh.mCheckBox.setEnabled(true); 
    vh.mTextView.setTextColor(Color.RED); 
   }
  }
  if (tld.contains("net")){
   if(mDataArr.get(pos).mName.contains("net")){
    vh.mCheckBox.setEnabled(true); 
    vh.mTextView.setTextColor(Color.RED); 
   }
  }
  if (tld.contains("co.kr")){
   if(mDataArr.get(pos).mName.contains("co.kr")){
    vh.mCheckBox.setEnabled(true);
    vh.mTextView.setTextColor(Color.RED);  
   }
  }
  if( tld.contains("kr")){
   if(mDataArr.get(pos).mName.contains("kr")){
    vh.mCheckBox.setEnabled(true); 
    vh.mTextView.setTextColor(Color.RED);  
   }
  }
  if (tld.contains("org")){
   if(mDataArr.get(pos).mName.contains("org")){
    vh.mCheckBox.setEnabled(true); 
    vh.mTextView.setTextColor(Color.RED);  
   }
  }
  
  if(tld.contains("info")){
   if(mDataArr.get(pos).mName.contains("info")){
    vh.mCheckBox.setEnabled(true); 
    vh.mTextView.setTextColor(Color.RED);  
   }
  }
  
  if(tld.contains("me")){
   if(mDataArr.get(pos).mName.contains("me")){
    vh.mCheckBox.setEnabled(true); 
    vh.mTextView.setTextColor(Color.RED); 
   }
  }
  vh.mTextView.setText(mDataArr.get(pos).mName);
  vh.mCheckBox.setChecked(mDataArr.get(pos).mChecked);
  vh.mCheckBox.setTag(mDataArr.get(pos)); 
  vh.mCheckBox.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
    // TODO Auto-generated method stub
    if (vh.mCheckBox.isChecked()) {
     coupon_chk_cnt += 1;
    } else {
     coupon_chk_cnt -= 1;
    }


  });

  return convertView;
 }

보시면 알겠지만 리스트뷰에 getView() 쪽 소스입니다.

 

들어오는 tld 값은

com ,co.kr, me  이런값들이 여러게 들어옵니다.

 

switch 문을 쓰려고 해보니까 문자열이나 배열로 비교해야하는데 그렇게는 switch 문을 못쓰더라고여

위 소스처럼 if 문을 썻을때는 리스트에 잘 적용되서 나오는데 스크롤을 내렸다가 올리면

vh.mTextView.setTextColor(Color.RED) 이게 아무대나 적용되는 문제가 생기고여 그걸 막자고

if(tld.contains("info")){

           vh.mCheckBox.setEnabled(true);

           vh.mTextView.setTextColor(Color.RED);

} else{

          vh.mCheckBox.setEnabled(false);

           vh.mTextView.setTextColor(Color.GRAY);

}

이런식으로 처리하면 리스트 전부를 바꿔버려서 문젭니다..

 

아니면 다른 방법으로 스크롤을 내렷다 올릴시 값이 안바뀌도록 설정하는 방법에 대해 도와주셔도 감사하겟습니다.

 

제가 필력이 딸리는것도 있고 직접보여주지 않는이상 설명하기 많이 까다로운  부분이라 양해좀 부탁드리면서 혹시

좋은 방법있으시면 도와주시기 바랍니다 .ㅠ

익명사용자 님이 2015년 7월 14일 질문
2015년 7월 14일 수정
else if 안쓰고 굳이 if문 계속 쓰는 이유가 있나요?
네.. 값이 여러개가 들어오는데 else if 쓰면 그부분 끝나면 아예 나가버리거든요..

2개의 답변

0 추천

저라면 그냥 쉽게 갈 것 같습니다. 그냥 if문이 아니라 if~else문이면 해결될 것 같아요

 

if(tld.contains("info")){

           vh.mCheckBox.setEnabled(true);

           vh.mTextView.setTextColor(Color.RED);

} else if(tld.contains("com")) {

// 이런 else if 문으로 ......나머지 단어들도..

} else{

          vh.mCheckBox.setEnabled(false);

           vh.mTextView.setTextColor(Color.GRAY);

}

cc1232 (35,280 포인트) 님이 2015년 7월 14일 답변
저도 해봣는데 이게 하나가 들어오는게 아니라 여러게가 들어와여..
com , net ,info 이렇게 들어오는데 저렇게 하면 중간에 나가버려서..
0 추천
String name = mDataArr.get(pos).mName;
boolean b = isContain("com", tld, name) || isContain("net", tld, name) || isContain("co.kr", tld, name);
vh.mCheckBox.setEnabled(b);
vh.mTextView.setTextColor(b ? Color.RED : Color.GRAY);
private boolean isContain(String word, String... params)
{
  boolean result = false;

  for (String str : params)
  {
    result = !TextUtils.isEmpty(str) && str.contains(word);
  }

  return result;
}

이런 식으로 줄이는 건 어때요?

 

----------------------------------------

String name = mDataArr.get(pos).mName;
boolean b = isContain(tld, name);
vh.mCheckBox.setEnabled(b);
vh.mTextView.setTextColor(b ? Color.RED : Color.GRAY);
private boolean isContain(String... params)
{
  boolean result = false;

  String[] domains = {"com", "net", "co.kr"};

  for (String domain : domains)
  {
    for (String str : params)
    {
      result = !TextUtils.isEmpty(str) && str.contains(domain);
    }
  }

  return result;
}

아니면 이런 식도 될 것 같고요 

쎄미 (162,410 포인트) 님이 2015년 7월 15일 답변
쎄미님이 2015년 7월 15일 수정
모자란 질문에 답해주셔서 감사합니다! 우선 그대로 적용해봤는데 바로 작동하진 안네요 우선 최대한 제 능력에서 고민해보고 수정해보도록 하겟습니다.
후..생각처럼은 안되네요 제 코드는 양쪽
tld.contains("org") 와 mDataArr.get(pos).mName.contains("org")) 양쪽에 org 라는 단어가 들어가있으면 변경해야하는 그런코드인데 알려주신 코드로 적용하면 다른값이 true 로 나오네요 자꾸..
어...해결했어요...덕분에..감사합니다 ㅠ 알려주신 코드랑 제 조잡한(?) 코드랑 조합해서 도전하니 해결됫네요.. 정말감사해요 ㅠ
...