Fragment์์ ListView ๊ตฌํํ๊ธฐ
[2020-07-13 ~ 2020-07-14]
๊ธฐ์กด์ ์ฐ๋ฆฌ๋ Navigation Drawer Menu์์
Fragment๋ฅผ ์ฌ์ฉํด ๋ฉ๋ด์ ํญ๋ชฉ๋ค์ ํด๋ฆญํ ๋๋ง๋ค
๊ฐ ํ์ด์ง๋ฅผ ์ด๋ํ๋๋ก ์ค์ ํด ์ฃผ์๋ค.
๊ทธ ์ดํ์ Fragment์ฐฝ ์์์ ๋ฆฌ์คํธ ํญ๋ชฉ๋ค์ ์์ฑํ๊ธฐ ์ํด์
๊ธฐ์กด์ Activity์์ ListView๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋๋ก ListView๋ฅผ ์ฌ์ฉํ๋ฉด
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์ด๋ฅผ ๊ณ๊ธฐ๋ก ์ฌ๋ฌ ์์๊ณผ ์ฌ์ดํธ๋ค์ ์ฐพ์ ๊ตฌํํด๋ด๋ ๋ฐฉ๋ฒ์ ์๊ฒ ๋์๊ณ ,
ListView๋ฅผ ํ ๋ฒ์ ์์ฑํ๊ธฐ์๋ ์ค๋ฅ๊ฐ ์ผ๋ ค๋์ด
์ด 3๋ฒ์ ๊ฑธ์ณ์ ListView๋ฅผ ์์ฑํด ๋ณด์๋ค.
#01. fragment ์์ ListView ํํ ์ ๋ ฅํ๊ธฐ
- fragment_settings.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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=".SettingsFragment">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/mainMenu"/>
</FrameLayout>
๋จผ์ ๊ธฐ์กด์ ListView๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ๊ทธ๋๋ก ๋ ์ด์์ ์์ ListView๋ฅผ ์ ๋ ฅํด ์ค๋ค.
์ด๋, FrameLayout์์ ListView๋ฅผ ๋ฃ์๋ค๋ ๊ฒ์ ์์ง ์๋๋ก ํ๋ค.
์ดํ์๋ ์๋ฐํ์ผ์ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋๋ฐ
error: no suitable constructor found for ArrayAdapter(MainActivityFragmet, int, String [])
...
error: cannot find symbol method findViewById(int)
๊ธฐ์กด์ Activity์์ ์ ๋ ฅํ๋ ๋ฐฉ๋ฒ์ผ๋ก ListView๋ฅผ ์ฌ์ฉํ๋ค๋ฉด
๋ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
์ฒซ ๋ฒ์งธ ์๋ฌ
error: no suitable constructor found for ArrayAdapter(MainActivityFragment, int, String [])
ํด๋น ์๋ฌ๊ฐ ๋ฐ์ํ๋ ์์ธ์ ์๊ธฐ ์ ์ ArrayAdapter์ ๋ํด์ ๊ฐ๋จํ ์ดํด๋ณด์๋ฉด
ArrayAdapter์ ์์ฑ์๋ ์ด 3๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง๊ฒ ๋๋๋ฐ
context, resource, objects์ด๋ค.
ArrayAdapter ( Context context, int resource, T [ ] objects )
context : ์๋๋ก์ด๋ ์์คํ ์์ ์ ๊ณต๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ญ ํ๊ฒฝ ์ ๋ณด์ ๋ํ ์ธํฐํ์ด์ค
resource : ๋ทฐ๋ฅผ ์ธ์คํด์คํ ํ ๋ ์ฌ์ฉํ ๋ ์ด์์์ด ํฌํจ๋ ๋ ์ด์์ ํ์ผ์ ๋ฆฌ์์ค ID
objects : ๋ฐฐ์ด๋ก ์ ์ธ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ
๊ธฐ์กด์ Activity๋ android.content.Context๋ก๋ถํฐ ์์๋ฐ์ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์
Context๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ด onCreate() ํจ์์์ ArrayAdapter ์์ฑ์์ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก this๋ฅผ ์ฌ์ฉํ ์ ์์์ง๋ง,
Fragment๋ java.lang.Object๋ก๋ถํฐ ์์๋ฐ์ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์
Context์๋ ๊ด๊ณ๊ฐ ์์ด this๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๊ทธ๋์ ์ด๋ฅผ ํด๊ฒฐํด ์ฃผ๊ธฐ ์ํด์
Fragment์์ ์์ ์ด ์ํ Activity์ ์ฐธ์กฐ๋ฅผ ์ป์ด์จ ๋ค์์
ArrayAdapter์ ์์ฑ์๋ก ์ ๋ฌํด ์ฃผ๋ฉด ๋๋ค.
์ฆ, Fragment์์ Activity์ ์ฐธ์กฐ๋ฅผ ํ๋ํ ์ ์๋ getActivity() ํจ์๋ฅผ ์ฌ์ฉํด ์ฃผ๋ฉด ๋๋ค.
๋ ๋ฒ์งธ ์๋ฌ
error: cannot find symbol method findViewById(int)
๋ ๋ฒ์งธ ์๋ฌ์ ์์ธ์ findViewById() ํจ์์ธ๋ฐ
ํด๋น ํจ์๋ Fragment์ ๋ฉค๋ฒ ํจ์๊ฐ ์๋ View์ ๋ฉค๋ฒ ํจ์ ์ด๊ธฐ ๋๋ฌธ์
Fragment์์ findViewById() ํจ์๋ฅผ ํธ์ถํ๋ ค๊ณ ํ๋ฉด ๋น์ฐํ๊ฒ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ LayoutInflater๋ฅผ ์ฌ์ฉํด Resource Layout์ View๋ก ๋ณํํด์ค ํ
findViewByid()๋ฅผ ํธ์ถํด ์ฃผ๋ฉด ๋๋ค.
- SettingsFragment.java
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
/**
* A simple {@link Fragment} subclass.
*/
public class SettingsFragment extends Fragment {
public SettingsFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// LayoutInflater ์ฌ์ฉํด Resource Layout์ View๋ก ๋ณํํด์ค ํ findViewById() ํธ์ถ
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_settings, container, false);
// ListView ์์ดํ
์ ํ์๋ ์ฌ์ฉ์ ํ
์ดํฐ ์ ์
String[] menuItems = {"number one", "number two", "number three", "number four"};
ListView listView = (ListView) view.findViewById(R.id.mainMenu);
// ๋ฐ์ดํฐ ์
๋ ฅ๋ฐ์ Adapter ์์ฑ
// fragment์์๋ 'this' ์ฌ์ฉ์ด ๋ถ๊ฐํ๋ฏ๋ก, Activity์ ์ฐธ์กฐ ํ๋์ด ๊ฐ๋ฅํ getActivity()ํจ์ ์ฌ์ฉ
ArrayAdapter<String> listViewAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, menuItems);
listView.setAdapter(listViewAdapter);
return view;
}
}
๋ ๊ฐ์ง์ ์๋ฌ๋ฅผ ํด๊ฒฐํ ํ ์ ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ ๋ชจ์ต์ด๋ค.
์ ๋ฎฌ๋ ์ดํฐ๋ฅผ ํตํด ํ์ธํด ๋ณด๋ฉด
fragment์์ listView๊ฐ ๋ณด์ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
fragment์์ listView๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค๋ ๊ฒ์ ์ด๋ฒ์ ์ฒ์ ์๊ฒ ๋์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๊ต์ฅํ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ์ง๋ง
ํด๋น ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๊ณ ๋๋ ๊ต์ฅํ ๋ฟ๋ฏํ๋ค.
๋ค์์๋ ๋ฆฌ์คํธ๋ทฐ์ ๋ด์ฉ์ ์ ๋ ฅํ๊ณ ํด๋ฆญํ๋ฉด
๋ค์ ํ์ด์ง๋ก ๋์ด๊ฐ ์ ์๊ฒ ํด ๋ณด์์ผ๊ฒ ๋ค.
๋๊ธ