조각 나열
ListFragment
는 Fragment
클래스의 하위 클래스입니다. 목록 조각은 ListFragment
클래스를 확장하는 조각입니다. 이와 같은 조각에는 목록 및 어댑터 작업을 위한 특별한 방법이 있으며 자동으로 고유한 레이아웃을 갖기 때문에 레이아웃 파일이 필요하지 않으며 하나의 루트 보기만 있습니다(a ListView
). 최신 목록 조각은 GridView
를 가질 수 있습니다.ListFragment 생성
ListFragment
하위 클래스를 만들 때 일부 사용자 지정 동작을 추가하려는 경우가 아니면 onCreateView()
를 재정의할 필요가 없습니다.
그러나 재정의하려면 메서드 본문에서 super()
를 호출해야 합니다.
DemoListFragment라는 목록 조각을 만들고 재정의합니다onCreateView()
.
public class DemoListFragment extends ListFragment {
@Override
public View onCreateview(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return super.onCreateView(inflate, container, savedInstanceState);
}
}
코드 분류onCreateView
메서드에서는 xml 레이아웃 파일을 확장하지 않았습니다. 이는 목록 조각이 자체 레이아웃을 자동으로 가지므로 자체 xml 파일을 팽창시킬 필요가 없기 때문입니다.
데이터를 ListFragments에 바인딩
목록 조각에서는 활동과 마찬가지로 어댑터를 사용하여 데이터ListViews
에 바인딩하지만 두 가지 주요 차이점이 있습니다. 그들은:
public class DemoListFragment extends ListFragment {
@Override
public View onCreateview(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return super.onCreateView(inflate, container, savedInstanceState);
}
}
목록 조각에서는 활동과 마찬가지로 어댑터를 사용하여 데이터
ListViews
에 바인딩하지만 두 가지 주요 차이점이 있습니다. 그들은:Adapter
의 생성자는 일반적으로 Context
인수를 사용합니다. 활동에서 Adapter
를 구성하는 경우 활동이 this
를 구현하므로 Context
를 Context
인수로 전달했을 것입니다.그러나 어댑터가 프래그먼트(Context를 구현하지 않는 개체)에서 구성되기 때문에 다른 곳에서 컨텍스트를 가져와야 합니다.
getContext()
개체에서 LayoutInflater
를 호출한 결과를 전달해야 합니다. 이름이 지정된 어댑터
ArrayAdapter
를 생성한다고 가정하면 demoArray라는 배열에 대해 목록 항목 하나의 레이아웃이 list_item.xml 파일에 정의되어 있으므로 아래 코드 스니펫으로 작업을 수행할 수 있습니다.ArrayAdapter<String> adapter = new ArrayAdapter(inflater.getContext(), android.R.layout.list_item, demoArray);
setListAdapter(adapter);
setListAdapter()
를 사용하여 어댑터를 설정합니다. 이는 ListFragments에 어댑터를 바인딩하려는 목록에 대한 기본 제공 참조가 이미 있기 때문입니다. 따라서 명시적으로 호출할 필요가 없습니다. 목록 조각의 클릭에 응답
ListFragment
는 리스너를 자동으로 구현하므로 클릭에 응답하는 메서드onListItemClick()
를 구현하기만 하면 됩니다.
기본 방식으로 onListItemClick()
를 구현할 수 있습니다. 사용자 지정 코드를 추가하기만 하면 됩니다. 하지만 이렇게 하면 Fragment
가 활동에 밀접하게 연결됩니다. 느슨한 결합을 달성하려면 추가 단계를 수행해야 합니다. 이러한 단계는 다음과 같습니다.
Listener
라는 처리기 메서드가 있는 itemClicked()
라는 인터페이스를 만듭니다. 클릭에 응답하려는 모든 활동은 인터페이스를 구현하고 해당 메서드를 재정의합니다.static interface Listener {
void itemClicked(long id);
}
ListFragment
내부에 개인 필드를 만듭니다.private Listener listener;
@Override void onAttach(Context context) {
super.onAttach(context);
this.listener = (Listener) context;
}
onListItemClick()
메서드에서 itemClicked()
라는 리스너의 핸들러 메서드를 호출하여 클릭에 응답합니다.public void onListItemClick(ListView listView, View itemView, int position, long id) {
if (listener != null) {
listener.itemClicked(id);
}
}
이 작업을 완료하면
Listener
가 연결될 모든 Activity
인터페이스에서 ListFragment
인터페이스를 구현하고 itemClicked()
메서드를 재정의하고 클릭을 처리하기 위해 일부 사용자 지정 논리를 작성할 수 있습니다.class DemoActivity extends AppCompatAtivity implements Listener {
@Override
void itemClicked(long id) {
// You can add custom logic here
}
}
Reference
이 문제에 관하여(조각 나열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/petemode/list-fragments-2ppg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)