조각 나열

ListFragmentFragment 클래스의 하위 클래스입니다. 목록 조각은 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에 바인딩하지만 두 가지 주요 차이점이 있습니다. 그들은:
  • Adapter의 생성자는 일반적으로 Context 인수를 사용합니다. 활동에서 Adapter를 구성하는 경우 활동이 this를 구현하므로 ContextContext 인수로 전달했을 것입니다.
    그러나 어댑터가 프래그먼트(Context를 구현하지 않는 개체)에서 구성되기 때문에 다른 곳에서 컨텍스트를 가져와야 합니다. getContext() 개체에서 LayoutInflater를 호출한 결과를 전달해야 합니다.

  • 이름이 지정된 어댑터ArrayAdapter를 생성한다고 가정하면 demoArray라는 배열에 대해 목록 항목 하나의 레이아웃이 list_item.xml 파일에 정의되어 있으므로 아래 코드 스니펫으로 작업을 수행할 수 있습니다.

    ArrayAdapter<String> adapter = new ArrayAdapter(inflater.getContext(), android.R.layout.list_item, demoArray);
    setListAdapter(adapter);
    


  • .setAdapter()가 아닌 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
        }
    }
    

    좋은 웹페이지 즐겨찾기