여러 개의 아이템 중에서 하나를 선택하도록 하는 위젯을 선택 위젯 이라고 함

선택 위젯은 어댑터(Adapter)를 사용하여야 함

이 어댑터에서 데이터를 관리하도록 해야 할 뿐만 아니라 화면에 보여지는 뷰도 getVeiw()메소드에서 결정함

선택위젯의 가장 큰 특징은 원본 데이터를 위젯에서 직접 설정하지 않고 어댑터라는 클래스를 사용하도록 되어 있다는점

어댑터가 데이터 관리 (getCount, getItems, getItemId, getVeiw)

리스트는 껍데기

 

선택 위젯으로 리스트뷰, 스피너, 그리드뷰(테이블 모양), 갤러리 등을 구현할 수 있음

 

<ListView

   android:id="@+id/list"

   android:layout_width

   android:layout_height

/>

 

LiseView list = (ListView) findViewById(R.id.list);

MyAdapter adapter = new MyAdapter();

list.setAdapter(adapter);

//리스트(껍데기)를 만들고, 리스트 객체에 어댑터(데이터)를 결합한다.

 

어댑터를 별도의 클래스(파일)로 만들어서 이용할 수 있음. 생성자로 Context 객체 전달

Class MyAdapter extends BaseAdapter //데이터 관리하는 어댑터 클래스, View 를 리턴 ex)TextView, LinearLayout

{

   Context mcontext;

   String[] names = {"홍길동", "이성계", "정도전", "세종대왕"};

   public MyAdapter(Context context)

      mcontext = context;

   public int getCount()

      return names.length;

   public Object getItems(int position)

      return names[position];

   public long getItemId(int position)

      return position;

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

   //getView메소드에서 View 객체에 LinearLayout 등을 리턴할 수 있다. 내부에 이미지, View등을 결합가능

      TextView text = new TextView(getApplicationContext());

      text.setText(names[position]);

      return text; 

}

 

Layout 역시 별도의 클래스(파일)로 만들어서 이용할 수 있음.

Class CustomerItemView extends LinearLayout{}

액티비티 에서는 SetContextVeiw()를 통해 xxx.xml 파일을 로딩하여 화면구성을 인플레이션 할수 있음

그러나 액티비티가 아닌 Layout을 상속받는 클래스에서는 SetContentView()로 인플레이션 할수 없음

따라서, 수동으로 인플레이션 코드를 작성해 주어야 함.

private void init(Context context)

LayoutInflater inflater = (LayoutInflater) context.getSystemService(ACTIVITY.LAYOUT_INFLATER_SERVICE);

inflater.inflate(R.layout.customer, this, true);

by wisegirl 2013. 3. 6. 09:17