[안드로이드] ListView 이해하기
728x90
반응형

Fragment를 이용해서 리스트뷰를 출력하는 실습이 있었다.

평소에 리싸이클러뷰(RecyclerView)를 주로 이용하다가

오랜만에 리스트뷰를 이용하니 기억이 잘 나지 않았다.

라디오버튼과 마찬가지로 이 참에 학습을 해보자.


<fragment_fragment_one.xml>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.kodonho.android.fragmentbasic.FragmentOne">

<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>

위의 리스트뷰를 상세하게 보여줄 item.xml도 있어야 한다.

이 것은 생략하도록 하겠다.



<FragmentOne.java>

public class FragmentOne extends Fragment {

ListView listView;

public FragmentOne() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_fragment_one, container, false);
listView = (ListView) view.findViewById(R.id.listView);

CustomAdapter adapter = new CustomAdapter(getActivity());
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 메인액티비티의 함수를 호출해서 상세 fragment 로 position 값을 넘기면서 이동한다
MainActivity activity = (MainActivity) getActivity();
// 클릭했을 때 셀의 포지션...
activity.position = position;
activity.goDetail();
}
});

return view;
}
}


ListView는 View Group이므로 Adapter가 필요하다.

그래서 CustomAdapter라는 것을 만들어, 받은 데이터를 View로 만들도록 한다.

이 때 adapter는 context 자리에 MainActivity를 가지고 온다.

자세한 것은 이후 inflate를 다룰 때 설명하겠다.

CustomAdapter를 구현 후 본문을 볼 수 있도록 onItemClick을 구현한다.

OnItemClick은 setOnItemClickListener를 통해 구현 가능하다.


<FragmentOne.java - CustomAdapter>

class CustomAdapter extends BaseAdapter {

Context context;
LayoutInflater inflater;

public CustomAdapter(Context context){
this.context = context;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
return MainActivity.datas.size();
}

@Override
public Object getItem(int position) {
return MainActivity.datas.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

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

if(convertView == null)
convertView = inflater.inflate(R.layout.fragment_item, null);

TextView id = (TextView) convertView.findViewById(R.id.id);
id.setText(position + "");

TextView title = (TextView) convertView.findViewById(R.id.content);
title.setText(MainActivity.datas.get(position).title);

return convertView;
}
}

데이터를 받아 View로 만들어 줄 adapter이다.

기본적으로 context는 받는다. (getActivity())

getView가 중요한데 fragment_item을 inflate하여 convertView에 적용한다.

이 convertView로 data를 개별 아이템 내 반영한다. (setText)

이렇게 각 함수를 채우면 된다.



참고 자료

추가 학습 필요 사항


728x90
반응형