package com.commonsware.android.selection;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.TextView;
public class GridDemo extends Activity
implements AdapterView.OnItemSelectedListener {
TextView selection;
String[] items={"lorem", "ipsum", "dolor", "sit", "amet",
"consectetuer", "adipiscing", "elit", "morbi", "vel",
"ligula", "vitae", "arcu", "aliquet", "mollis",
"etiam", "vel", "erat", "placerat", "ante",
"porttitor", "sodales", "pellentesque", "augue", "purus"};
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
selection=(TextView)findViewById(R.id.selection);
GridView g=(GridView) findViewById(R.id.grid);
g.setAdapter(new FunnyLookingAdapter(this,
android.R.layout.simple_list_item_1,
items));
g.setOnItemSelectedListener(this);
}
public void onItemSelected(AdapterView<?> parent, View v,
int position, long id) {
selection.setText(items[position]);
}
public void onNothingSelected(AdapterView<?> parent) {
selection.setText("");
}
private class FunnyLookingAdapter extends ArrayAdapter {
Context ctxt;
FunnyLookingAdapter(Context ctxt, int resource,
String[] items) {
super(ctxt, resource, items);
this.ctxt=ctxt;
}
public View getView(int position, View convertView,
ViewGroup parent) {
TextView label=(TextView)convertView;
if (convertView==null) {
convertView=new TextView(ctxt);
label=(TextView)convertView;
}
label.setText(items[position]);
return(convertView);
}
}
}
-알짜만 골라 배우는 안드로이드 프로그래밍-
계속 질문하는 저도 참 슬픕니다. 자바기반이라 해서 졸작으로 선택을 했는데 으엉! 벌써부터 어렵습니다.
그래도 윗부분들은 계속 질문공세를 해서 조금이라도 알겠는데
private class FunnyLookingAdapter extends ArrayAdapter {
Context ctxt;
FunnyLookingAdapter(Context ctxt, int resource,
String[] items) {
super(ctxt, resource, items);
this.ctxt=ctxt;
}
public View getView(int position, View convertView,
ViewGroup parent) {
TextView label=(TextView)convertView;
if (convertView==null) {
convertView=new TextView(ctxt);
label=(TextView)convertView;
}
label.setText(items[position]);
return(convertView);
}
}
}
이부분은 도저히 이해불능입니다. 혹시 주석 달아 주실분 계신가요?
우선, FunnyLookingAdapter에 대해서는, 어레이어탭터만을 사용하게 되면 폰트의 크기가 크게 되는 경우가 있고, 따라서 단어가 길게 되면 열을 맞추기 위해 단어가 두개의 행을 점유하는 경우가 발생합니다.
이렇게 되면, 룩앤필에 적합하지 않게 됩기 때문에, FunnyLookingAdapter를 도입하게 된 것으로 생각됩니다.
다음에, getView에 대해서는, 룩앤필에 적합하도록 convertView를 사용하여 폰트의 크기를 전체적으로 알맞게 변환하는 것으로 생각됩니다.
이와같이 추즉하게 된 배경에는, 상기 프로그램에서 FunnyLookingAdapter 및 getView를 사용하지 않고 어레이어탭터만을 사용하여 실행보면 자명하게 된다고 생각합니다.
간단하게 주석을 달면 다음과 같습니다:
// FunnyLookingAdapter는 어레이어댑터로부더 상속을 받는다.
private class FunnyLookingAdapter extends ArrayAdapter {
Context ctxt;
// 상속을 받은 FunnyLookingAdapter는 컨스트럭터를 구축한다.
// 자식인 FunnyLookingAdapter는 상위클래스에 인수를 전달한다.
FunnyLookingAdapter(Context ctxt, int resource,
String[] items) {
super(ctxt, resource, items);
this.ctxt=ctxt;
}
// 각열을 유지하기 위한 뷰를 만든다.
// 여기서, convertView는 폰트의 크기를 변환하는 것을 말한다.
public View getView(int position, View convertView,
ViewGroup parent) {
TextView label=(TextView)convertView;
if (convertView==null) {
convertView=new TextView(ctxt);
label=(TextView)convertView;
}
label.setText(items[position]);
return(convertView);
}
아무쪼록, 도움이 되었으면 합니다.