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

listview에서 둘 이상 text 수정하기

0 추천

제가 만들고 싶은건 이런식의 listview여서 "아침"이라고 써있는 부분과 "1024kcal"이라고 되어있는 부분을 수정하고 싶어요

그런데 adapter에서 문제가 난건지 '아침'쪽에 kcal에 대한 data만 넘어가고 말더라구요..

이런 식으로 뜨고 있구요, 보시면 숫자가 뒤쪽으로 가야하는데 앞에 들어와버리고 하는 문제가 있어요

 

다른데서는 문제를 도저히 못찾겠고 어댑터가 문제같은데 정확히 어딘지 모르겠네요..

 

package com.example.dietapp;

import java.util.*;

import android.content.*;
import android.view.*;
import android.widget.*;

public class AdaptItem extends BaseAdapter {
	//뷰를 전개할 수 있는 객체를 찾아오기 위한 변수
	Context maincon;
	
	//뷰를 전개할 수 있는 객체의 주소를 저장할 변수
	LayoutInflater inflater;
	
	//뷰에 출력할 데이터의 주소를 저장할 변수
	ArrayList<ItemDietschedule> arSrc;
	
	//전개할 뷰의 아이디를 저장할 변수
	int layout;
	
	
	
	//생성자를 이용하여 외부 객체와의 통신
	//생성자 - 포함하고 있는 객체로부터 넘겨받아서 멤버 변수 초기화하고
	//뷰를 전개할 수 있는 LayoutInflater 생성
	public AdaptItem(Context maincon, ArrayList<ItemDietschedule> arSrc, int layout){
		this.maincon= maincon;
		this.arSrc= arSrc;
		this.layout= layout;
		
		//뷰를 전개할 수 있는 객체 가져오기
		inflater= (LayoutInflater)maincon
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}
	
	//출력한 row의 갯수를 설정해주는 메서드
	@Override
	public int getCount(){
		return arSrc.size(); //넘겨받은 갯수만큼 리턴시킨다
	}
	
	//텍스트 뷰에 출력할 문자열을 리턴하는 메서드
	//position은 각 row의 인덱스
	@Override
	public Object getItem(int position){
		return arSrc.get(position).getName();
	}

	//row의 아이디를 설정하는 메서드
	@Override
	public long getItemId(int position){
		//TODO Auto-generated method stub
		return position;
	}
	
	//실제 출력될 row의 모양을 설정하는 메서드
	//position은 row의 인덱스이고 convertView가 실제 출력될 뷰이고
	//parent가 출력될 리스트 뷰이다.
	@Override
	public View getView(int position, View convertView, ViewGroup parent){
		
		final int pos = position;
		
		//출력하라 뷰는 한개만 생성!!!
			if(convertView== null)
				//layout 아이디로 만들어진 xml 파일의 내용을 가지고 
				//parent의 일부분이 되는 뷰를 생성
				convertView= inflater.inflate(layout, parent, false);
			
			
			//전개한 뷰에서 이미지 뷰를 찾아서 이미지 뷰에 데이터의 아이콘 값을 대입해서 이미지 출력
			
			TextView mealName= (TextView)convertView.findViewById(R.id.mealName);
			mealName.setText(arSrc.get(position).getName());
			
			TextView mealKcal= (TextView)convertView.findViewById(R.id.mealKcal);
			mealName.setText(arSrc.get(position).getKcal());
			
			Button btn= (Button)convertView.findViewById(R.id.btn);
			
			btn.setOnClickListener(new View.OnClickListener(){
				
				@Override
				public void onClick(View v){
					String str= arSrc.get(pos).getName() + "를 입력합니다.";
					Toast.makeText(maincon, str, Toast.LENGTH_SHORT).show();
					
				}
			});
			return convertView;
			
	}

 

+ 이클립스에서 돌려보니까 밑쪽에 위치한 

TextView mealKcal= (TextView)convertView.findViewById(R.id.mealKcal);
mealName.setText(arSrc.get(position).getKcal());
이 부분이 사용안되고 있다고 뜨고 있긴하더라구요.. 근데 왜 안되는지, 어떻게 해야 할지 모르겟어서요 ㅠ
 
느낌은 
public Object getItem(int position){
return arSrc.get(position).getName();
}
여기서 getKcal();이것도 해줘야 하는거 같긴한데 리턴에 두개를 넣을수가 없는거같아서 어떻게 해야할지 난감하네요

 

KKE (400 포인트) 님이 2014년 6월 10일 질문
코드 문법 오류 입니다.
TextView mealKcal= (TextView)convertView.findViewById(R.id.mealKcal);
            mealName.setText(arSrc.get(position).getKcal());

이 코드에서
            mealKcal.setText(arSrc.get(position).getKcal());
이렇게 고쳐야 합니다.
허허허... cv의 폐해군요... ㅋㅋ

답변 달기

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