총 게시물 933건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

ListView에 각기 다른 이벤트를 넣는건 어느정도 알겠는데,

글쓴이 : KuRoN 날짜 : 2018-04-25 (수) 17:43 조회 : 215
글주소 : http://www.androidside.com/B49_best/12979
 
  COLOR 교보문고
COLOR, 신간, 베스트셀러 업데이트, 최대1만원 할인+바로드림 서비스!
www.kyobobook.co.kr
  위메프 COLOR
디지털가전 최저가 도전! 10만원 이상 할인쿠폰, 무이자 12개월 COLOR
www.wemakeprice.com/
  COLOR 전문 태광포리머
플라스틱 제품 COLOR 조색 및 드라이칼라 마스터배치 전문생산
www.tk-polymer.co.kr
신청하기


public View getView(int position, View convertView, final ViewGroup parent) {
int viewType = getItemViewType(position);
final Context context = parent.getContext();

if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ListViewItem listViewItem = rader_listviewitem.get(position);


switch (viewType) {
case ITEM_SPINNER_LIST :
convertView = inflater.inflate(R.layout.rader_system_spinner, parent, false);

final Spinner rader_system_spinner = (Spinner) convertView.findViewById(R.id.rader_system_spinner);
final TextView rader_spinner_text = (TextView) convertView.findViewById(R.id.rader_spinner_text);

rader_spinner_text.setText(listViewItem.getSpinner());

if (position == 0) {
final String[] data = {"English", "Other languge"};

final ArrayAdapter rader_spinner_arrayadapter = new ArrayAdapter(getActivity(), R.layout.custom_spinner, R.id.custom_spinner_text, data);
rader_system_spinner.setAdapter(rader_spinner_arrayadapter);

rader_system_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
rader_spinner_text.setText("Language : " + data[i]);
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}

if (position == 1) {
final String[] data = {"River", "Sea"};

final ArrayAdapter rader_spinner_arrayadapter = new ArrayAdapter(getActivity(), R.layout.custom_spinner, R.id.custom_spinner_text, data);
rader_system_spinner.setAdapter(rader_spinner_arrayadapter);

rader_system_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
rader_spinner_text.setText("Usage : " + data[i]);
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}
});
}

else if (position == 2) {
final String[] data = {"Landscape", "Portrait"};

final ArrayAdapter rader_spinner_arrayadapter = new ArrayAdapter(getActivity(), R.layout.custom_spinner, R.id.custom_spinner_text, data);
rader_system_spinner.setAdapter(rader_spinner_arrayadapter);

rader_system_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
rader_spinner_text.setText("Orientation Setting : " + data[i]);
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}
});
}

else if (position == 3) {
final String[] data = {"Rader", "Fish Finder"};

final ArrayAdapter rader_spinner_arrayadapter = new ArrayAdapter(getActivity(), R.layout.custom_spinner, R.id.custom_spinner_text, data);
rader_system_spinner.setAdapter(rader_spinner_arrayadapter);

rader_system_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
rader_spinner_text.setText("Software Installation : " + data[i]);
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}
});
}
}
}
return convertView;

이 처럼 Position 별로 각기 다른 이벤트를 주면서 할 수는 있겠습니다만,
이걸 ExpandableListVie의 자식들에게 하려면 어떤식으로 해야하나요?
뭔가 될 거 같으면서도 안되네요 ㅠㅠ

혹시 예제 사이트가 있다면 알려주셧으면 합니다 ㅠ



KuRoN 님의 개발 Q&A FAQ 최신글 [더보기]


질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

허접샴푸 2018-04-26 (목) 08:45
최근 몇년간 recyclerview만 써서 listview라..
Expandable 처럼 보이게 하기위해, visibility를 사용해서 visible, invisible로 작업할것같고, 그렇게 하면 괜찮지 않을까 싶습니다.

아래 사이트 참고해보세요.
https://stackoverflow.com/questions/28536553/different-child-layout-for-each-group-header-in-expandablelistview-android
댓글주소 추천 0 반대 0
     
     
KuRoN 2018-04-26 (목) 18:17
[@허접샴푸] 흠 봤는데 뭔가 더 복잡해진 느낌이에요...ㅠ
댓글주소 추천 0 반대 0
OSKiller 2018-04-26 (목) 08:57
익스펜더블도 동일합니다
차이점이라곤 position이 두개 존재 한다는것 뿐이죠
댓글주소 추천 0 반대 0
     
     
KuRoN 2018-04-26 (목) 09:08
[@OSKiller] Position에 두개라는건 Group과 Child 두개여서 그런건가요? 저는 Group쪽에는 다른 기능을 넣을 생각이 없는데 그럼 Child쪽에만 ListView에서 했던 것처럼 하면 되는건가요?
댓글주소 추천 0 반대 0
OSKiller 2018-04-26 (목) 09:26
Group, Child 두가지에 대해서 함수가 각각 따로 있습니다.
Group은 Group Position만 있고
Child 는 Group Position, Child Position 두개가 존재 합니다
그에따라 구분 해주시면 됩니다
댓글주소 추천 0 반대 0
     
     
KuRoN 2018-04-26 (목) 18:16
[@OSKiller] 이건 도무지 답이 안나오네요 ㅠ 말씀하신게 어떤 의미인지는 알겠는데 도무지 뭘 건들여야할지...
정말 이건 안된다는건 알고 있는데

private final LayoutInflater alarm_inf;
private String[] alarm_groups;
private String[][] alarm_children;

public AlarmTabsListAdapter(String[] alarm_groups, String[][] alarm_children) {
this.alarm_groups = alarm_groups;
this.alarm_children = alarm_children;
alarm_inf = LayoutInflater.from(getActivity());
}

@Override
public int getGroupCount() {
return alarm_groups.length;
}

@Override
public int getChildrenCount(int i) {
return alarm_children[i].length;
}

@Override
public Object getGroup(int i) {
return alarm_groups[i];
}

@Override
public Object getChild(int i, int i1) {
return alarm_children[i][i1];
}

@Override
public long getGroupId(int i) {
return i;
}

@Override
public long getChildId(int i, int i1) {
return i1;
}

@Override
public boolean hasStableIds() {
return true;
}

@Override
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {

ViewHolder alarm_holder;

if(view == null) {
view = alarm_inf.inflate(R.layout.geneal_group, viewGroup, false);

alarm_holder = new ViewHolder();
alarm_holder.text = (TextView) view.findViewById(R.id.groupText);

view.setTag(alarm_holder);
} else {
alarm_holder = (ViewHolder) view.getTag();
}

alarm_holder.image = (ImageView) view.findViewById(R.id.groupimage);
if (b) {
alarm_holder.image.setImageResource(R.drawable.image_down);
} else {
alarm_holder.image.setImageResource(R.drawable.image_up);
}

alarm_holder.text.setText(getGroup(i).toString());

return view;
}

@Override
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {

ViewHolder alarm_holder;

if(view == null) {
view = alarm_inf.inflate(R.layout.geneal_child, viewGroup, false);
alarm_holder = new ViewHolder();

alarm_holder.text = (TextView) view.findViewById(R.id.item_text);
alarm_holder.image = (ImageView) view.findViewById(R.id.childimage);

view.setTag(alarm_holder);
} else {
alarm_holder = (ViewHolder) view.getTag();
}

alarm_holder.text.setText(getChild(i,i1).toString());

return view;

}

@Override
public boolean isChildSelectable(int i, int i1) {
return true;
}

private class ViewHolder {
TextView text;
ImageView image;
}

}

이런 코드가 있다면 어디에 뭘 어떻게 해야하나요?ㅠ
ViewHolder 를 사용하지 않고 각각 다른 이벤트를 넣으려면..
정말 이거 때문에 1주일 정도 고민하고 있는 제가 한심스럽긴 한데..

댓글주소 추천 0 반대 0
어비서 2018-04-26 (목) 13:50
http://abyser.tistory.com/83?category=245182 참고해보셔요
댓글주소 추천 0 반대 0
     
     
KuRoN 2018-04-26 (목) 18:17
[@어비서] 답변 감사합니다. 한번 참고해서 다시 도전해볼게요 ㅠ 
댓글주소 추천 0 반대 0
OSKiller 2018-04-27 (금) 07:45
child동작를 다르게 하고 싶으신것 아닙니까?
getChildView있네요
댓글주소 추천 0 반대 0
     
     
KuRoN 2018-04-27 (금) 08:58
[@OSKiller] 네, getChildView 부분을 수정해야한다는 건 알고 있는데요,
뭔가 도무지 감이 안잡혀요. 일단 저번에 말씀해주신데로 계속 헛짓거리도 해보고 있긴 한데.
될듯말듯 하면서 안되네요 ㅠ 
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기