여러 피드 항목으로 Newsfeed 유형 레이아웃을 구현하려고합니다. 뉴스 피드 항목은 접힐 때 특정 레이아웃을 가지며이 레이아웃은 항목을 클릭 할 때 '폭발'버전으로 대체됩니다.android - 프로그래밍 방식으로 레이아웃을 바꾸고 ViewStub를 사용합니다.
사용자 지정 항목의 ListView를 사용하여이 작업을 수행했습니다. 사용자 정의 항목 XML 레이아웃 파일에는 레이아웃을 앞뒤로 변경하는 데 사용한 ViewStub가 있습니다. 이제 레이아웃을 RecyclerView로 '이전'하고 ViewHolder 디자인 패턴을 따르기를 원했습니다. 후자는 내가 먼저 시도한 것이며 모든 종류의 문제를 겪고 있습니다.
다음과 같이 내 접근 방식이있다 : 축소 된 레이아웃 (events_list_item_content) 확장 된 레이아웃 (events_list_item_selected_content)에
가져 오기 참조;
ViewStub 레이아웃 (view_stub_layout)으로 설정할 간단한 레이아웃 리소스 파일에 대한 참조를 가져옵니다.
ViewStub 참조를 가져 와서 레이아웃 (view_stub_layout) inflate를 설정하고 접힌 레이아웃보기를이 레이아웃에 추가합니다. 처음 피드를 만들 때 모든 항목이 축소됩니다.
(항목을 클릭 한 후 초기화) ViewStubLayout에서 이전 뷰 (레이아웃)를 제거하고 다른 유형의 레이아웃을 추가하십시오. 테스트 할 때
public class FeedRecyclerAdapter extends BaseAdapter { public class ViewHolder { View inflatedViewStub1; ViewStub viewStub; LinearLayout viewStubLayout; LinearLayout listItemContent, listItemContentSelected; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (inflater == null) inflater = (LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); final FeedItem item = feedItems.get(position); final ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = inflater.inflate(R.layout.events_list_item_content_new_container, parent, false); View view = null; view = inflater.inflate(R.layout.events_list_item_content, null); viewHolder.listItemContent = (LinearLayout) view.findViewById(R.id.events_list_item_content); view = inflater.inflate(R.layout.events_list_item_selected_content, null); viewHolder.listItemContentSelected = (LinearLayout) view.findViewById(R.id.events_list_item_content_selected); view = inflater.inflate(R.layout.view_stub_layout, null); viewHolder.viewStubLayout = (LinearLayout) view.findViewById(R.id.view_stub_layout); viewHolder.viewStub = (ViewStub) convertView.findViewById(R.id.list_item_feed); (viewHolder.viewStubLayout).addView(viewHolder.listItemContent); viewHolder.viewStub.setLayoutResource(R.layout.view_stub_layout); viewHolder.inflatedViewStub1 = viewHolder.viewStub.inflate(); convertView.setTag(viewHolder); } else viewHolder = (ViewHolder) convertView.getTag(); if (item.getExploded()) { viewHolder.viewStubLayout.removeAllViews(); viewHolder.viewStubLayout.addView(viewHolder.listItemContentSelected); } else { viewHolder.viewStubLayout.removeAllViews(); viewHolder.viewStubLayout.addView(viewHolder.listItemContent); } return convertView; }
그러나, 뉴스 피드를 표시하도록되어 페이지가 비어 있습니다 :
여기 내 사용자 정의 어댑터 클래스입니다.
나는이 대답에 이미 해당 게시물을 ... 본 적이
, 때 이제까지 ViewStub의 레이아웃 리소스로 설정로드 할 레이아웃은 무엇입니까? LinearLayout은 ViewStub의 레이아웃 리소스로 설정됩니까? layoutId 및 secondLayoutId 란 무엇입니까? – Lostinjava