안녕하십니까. 벌써 저녁이군요.


코드 만지다가, 아무리 봐도 이해가 안 되는 현상이 나와서, 조언을 듣기 위해 질문을 올립니다.

현상을 말씀드리면, 제목대로입니다.

예를 들어 listView에 5개의 데이터를 넣으면, 1~4번째 데이터는 화면에 잘 보이는데, 마지막 5번째의 데이터가 화면에 보이지 않고 대신 1번째의 데이터가 다시 한 번 보입니다.

디버그로 찍어 보면, 데이터 자체는 Adapter 에 1~5 까지 다 들어갔습니다.


코드를 올리면요.


[code]

public class listActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

   // TODO Auto-generated method stub

   setContentView(R.layout.list2 );

...

        ArrayList<CSList> dataList = list

        MyAdapter adapter = new MyAdapter( this, dataList );

        // 리스트 뷰에 어뎁터 연결

        ListView listView = ( ListView )findViewById( R.id.listView1 );

        listView.setAdapter( adapter );

}


class MyAdapter extends BaseAdapter{

ArrayList<CSList> mList;

int mLength;

listActivity mContext;

LayoutInflater mLayoutInflater;

MyAdapter( Context ctx, ArrayList<CSList> list )

{

this.mContext = ( listActivity )ctx;

this.mList = list;

mLength = list.size();

mLayoutInflater = (LayoutInflater )mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

Log.v( "listActivity", "Adapter:List:size():" + mList.size() );

Log.v( "listActivity", "Adapter:List:first():" + mList.get( 0 ).name );

Log.v( "listActivity", "Adapter:List:last():" + mList.get( mList.size() - 1 ).name );

}

public int getCount() {

//return mList.size();

return mLength;

}

public CSList getItem( int position ) {

return mList.get( position );

}

public long getItemId( int position ) {

return position;

}

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

if ( convertView == null ) {

Log.v( "SearchLocaltion4", "getView():IN IF:position:" + position );

convertView = mLayoutInflater.inflate(R.layout.listitem, null );

TextView title = (TextView)convertView.findViewById(R.id.txtTitle );

CSList values = mList.get( position );

title.setText( values.name );

TextView addr = (TextView)convertView.findViewById(R.id.txtSearch3ListAddr );

addr.setText( values.address );

convertView.setTag( new Integer(position) );

convertView.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

int pos2 = (Integer)v.getTag( );

Toast.makeText( v.getContext(), "position:pos:" + pos2, 4).show();

Log.v( "listActivity", "getView(). click. position:" + pos2 );

}

});

}

return convertView;

}

}

}

[/code]

와 같이 되어 있습니다. 코드 보시면 아시겠지만, 유별날 것도 없는 custom list view 입니다.

에러 자체는 잡았습니다. 위의 코드에서 getView 부분을, convertView 가 매번 새로 써 지게 만들면 되더군요. 이렇게요.

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

// if ( convertView == null ) { // 매번 새로 써 지도록 if 를 날린다.

Log.v( "SearchLocaltion4", "getView():IN IF:position:" + position );

convertView = mLayoutInflater.inflate(R.layout.listitem, null );

TextView title = (TextView)convertView.findViewById(R.id.txtTitle );

CSList values = mList.get( position );

title.setText( values.name );

TextView addr = (TextView)convertView.findViewById(R.id.txtSearch3ListAddr );

addr.setText( values.address );

convertView.setTag( new Integer(position) );

convertView.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

int pos2 = (Integer)v.getTag( );

Toast.makeText( v.getContext(), "position:pos:" + pos2, 4).show();

Log.v( "listActivity", "getView(). click. position:" + pos2 );

}

});

// }

return convertView;

}

근데...이러려고 ListView 쓰는 거 아니잖아요? OTL

이럴 거면 동적으로 TextView 와 ListView 를 생성해서 inflate 한 다음 주욱 늘어뜨리면 되니까요.


원인이나 올바른(?) 해결책 등, 의견이나 조언 아무거나 좋습니다. 조언 해 주시면 대단히 감사하겠습니다.

그럼, 모두들 좋은 하루 되시기 바랍니다.


참고로, 로그 찍어 보니까 getView 가 0,1,2,3 까지 실행되고 다음 0 이 다시 실행되더군요. listView가 한 화면에 대략 3줄 약간 넘게 화면을 점유하고 있으니까, 그게 연관있지 않을까? 하는 생각이 들긴 합니다만... 정확한건 모르겠습니다. OTL


07-25 10:00:44.071: V/listActivity(1850): getView():START:position:0

07-25 10:00:44.071: V/listActivity(1850): getView():IN IF:position:0

07-25 10:00:44.101: V/listActivity(1850): getView():START:position:1

07-25 10:00:44.111: V/listActivity(1850): getView(): OUT IF: position:1

07-25 10:00:44.122: V/listActivity(1850): getView():START:position:2

07-25 10:00:44.141: V/listActivity(1850): getView(): OUT IF: position:2

07-25 10:00:44.161: V/listActivity(1850): getView():START:position:3

07-25 10:00:44.172: V/listActivity(1850): getView(): OUT IF: position:3

07-25 10:00:44.241: V/listActivity(1850): getView():START:position:0

07-25 10:00:44.241: V/listActivity(1850): getView(): OUT IF: position:0

07-25 10:00:44.271: V/listActivity(1850): getView():START:position:1

07-25 10:00:44.271: V/listActivity(1850): getView(): OUT IF: position:1

07-25 10:00:44.292: V/listActivity(1850): getView():START:position:2

07-25 10:00:44.301: V/listActivity(1850): getView(): OUT IF: position:2

07-25 10:00:44.342: V/listActivity(1850): getView():START:position:3

07-25 10:00:44.342: V/listActivity(1850): getView(): OUT IF: position:3

07-25 10:00:44.501: V/listActivity(1850): getView():START:position:0

07-25 10:00:44.512: V/listActivity(1850): getView():IN IF:position:0

07-25 10:00:44.531: V/listActivity(1850): getView():START:position:1

07-25 10:00:44.541: V/listActivity(1850): getView(): OUT IF: position:1

07-25 10:00:44.581: V/listActivity(1850): getView():START:position:2

07-25 10:00:44.581: V/listActivity(1850): getView(): OUT IF: position:2

07-25 10:00:44.601: V/listActivity(1850): getView():START:position:3

07-25 10:00:44.611: V/listActivity(1850): getView(): OUT IF: position:3

07-25 10:00:45.071: I/ActivityManager(61): Displayed helloworld1.kr.pkg1/.SearchLocale4: +1s141ms

07-25 10:00:45.891: D/dalvikvm(1850): GC_CONCURRENT freed 719K, 51% free 3348K/6727K, external 12036K/13266K, paused 4ms+30ms

07-25 10:00:45.940: D/webviewglue(1850): nativeDestroy view: 0x417f30

07-25 10:00:45.940: D/webviewglue(1850): nativeDestroy view: 0x461370

07-25 10:00:45.961: D/webviewglue(1850): nativeDestroy view: 0x465af8

07-25 10:00:45.981: D/webviewglue(1850): nativeDestroy view: 0x461578

07-25 10:00:47.660: V/listActivity(1850): getView():START:position:4

07-25 10:00:47.660: V/listActivity(1850): getView(): OUT IF: position:4

07-25 10:00:49.340: V/listActivity(1850): getView():START:position:0

07-25 10:00:49.340: V/listActivity(1850): getView(): OUT IF: position:0

07-25 10:00:49.390: V/listActivity(1850): getView():START:position:3

07-25 10:00:49.390: V/listActivity(1850): getView(): OUT IF: position:3

07-25 10:00:50.490: V/listActivity(1850): getView():START:position:4

07-25 10:00:50.490: V/listActivity(1850): getView(): OUT IF: position:4

07-25 10:00:50.600: V/listActivity(1850): getView():START:position:1

07-25 10:00:50.600: V/listActivity(1850): getView(): OUT IF: position:1


여름철 메뚜기가 마냥 부러운 1人