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

section 으로 나누어진 리스트뷰 구현 질문입니다..

0 추천

객체를 받아서 객체의 값들을 뿌려주는 리스트가 구현되어있습니다..

섹션을 나눠야 해서 수정좀 하려고 하는데 진짜 어떻게 해야할지 하나도 모르겠습니다.

예제 코드를 봤는데도 도통..아..

그리고 예제코드들은 전부 다 Adapter를 BaseAdapter로 사용했더라구요.. 저는 ArrayAdapter를 사용중입니다..

그래서 더 모르겠습니다..

 

제 어뎁터는 이렇게 생겼는데.. 어떻게 구현을 해야하나요 제발 좀 도와주세요..

 

package com.btb.pump.pvt.adapter;

import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.btb.pump.pvt.R;
import com.btb.pump.pvt.engine.Const;
import com.btb.pump.pvt.vo.DeviceInfo;

public class TalkerListAdapter extends ArrayAdapter<DeviceInfo> {

	private int resourceId;
	private LayoutInflater inflater = null;

	public TalkerListAdapter(Context ctx, int resourceId, List<DeviceInfo> talkerList) {
		super(ctx, resourceId, talkerList);
		this.inflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		this.resourceId = resourceId;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder = null;
		if (convertView == null) {
			viewHolder = new ViewHolder();
			convertView = inflater.inflate(resourceId, null);
			viewHolder.easyWhisper = (LinearLayout)convertView.findViewById(R.id.easy_whisper);
			viewHolder.deviceName = (TextView)convertView.findViewById(R.id.talker_name);
			viewHolder.state = (TextView)convertView.findViewById(R.id.state);
			viewHolder.isOnline = (ImageView)convertView.findViewById(R.id.is_online);

			convertView.setTag(viewHolder);
		}
		else {
			viewHolder = (ViewHolder)convertView.getTag();
		}

		viewHolder.deviceName.setText(getItem(position).getDeviceName());

		// 사용자 접속 여부에 따른 UI 변경
		if (getItem(position).getState() == Const.OFFLINE) {
			// 미접속
			viewHolder.state.setText(R.string.disconnected);
			viewHolder.state.setTextColor(0xFF505A68);
			viewHolder.isOnline.setImageResource(com.btb.pump.pvt.R.drawable.icon_talker_offline);
			viewHolder.deviceName.setTextColor(0xFF505A68);
		}
		else if (getItem(position).getState() == Const.ONLINE) {
			// 접속
			if (getItem(position).getNewer() == 1) { // 이전 구성원목록에 없던 사용자가 새로 접속했다면 노란색으로 띄워주기위해 Newer를 검사한다.
				viewHolder.state.setTextColor(0xFFFFD200);
				viewHolder.deviceName.setTextColor(0xFFFFD200);
			}
			else {
				viewHolder.state.setTextColor(0xFFACB3BF);
				viewHolder.deviceName.setTextColor(0xFFACB3BF);
			}
			if (getItem(position).getDeviceType() == Const.MONITOR) {
				// 모니터링
				viewHolder.state.setText(R.string.monitor);
				viewHolder.isOnline.setImageResource(R.drawable.icon_talker_online);
			}
			else {
				// 일반 접속
				viewHolder.state.setText(R.string.connected);
				viewHolder.isOnline.setImageResource(R.drawable.icon_talker_online);
			}
		}

		return convertView;
	}

	/*
	 * ViewHolder
	 */
	class ViewHolder {
		public LinearLayout easyWhisper = null;
		public TextView deviceName = null;
		public TextView state = null;
		public ImageView isOnline = null;
	}
}

뭐 addSection을 만들고 어쩌구 하는데..

 

getViewTypeCount 인가 이런 함수도 쓰이고.. 근데 ArrayAdapter에는 없더라구요..

 

어떻게 구간을 나눠야 하는지.. 도움좀 주시면 감사하겠습니다..

윤둥이 (4,560 포인트) 님이 2014년 11월 27일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...