다소 혼란 스럽지만 거기에 매달려 설명을 위해 의견을 남기십시오. 어댑터 내에서 RecyclerView를 사용하고 있습니다. 이것은 ListView에서 가로로 스크롤 할 수있는 여러 행이 필요하기 때문입니다. 행 수는 완벽하지만 각 행의 항목 수가 잘못되었습니다. 첫 번째 행에는 정확한 행 수가 표시되지만 그 다음 행에는 하나만 필요할 때 각 행에 여러 항목이 표시됩니다. 행 1 개 표시 한 항목 (이 내가 원하는 것입니다), 2 개 행 표시 2 개 항목, 행 3 개 디스플레이 3 개 항목 등이 첫 번째 어댑터 호출 내 조각 파일입니다어댑터 내부에서 RecyclerView 사용
public class featured_fragment extends android.support.v4.app.Fragment {
public ArrayList<featured_post> featured_post_list = new ArrayList<>();
private RecyclerView recyclerView;
public featured_fragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.featured_activity, container, false);
ListView listView = view.findViewById(R.id.featured_list);
featuredAdapter adapter = new featuredAdapter(getContext(),featured_post_list);
listView.setAdapter(adapter);
//Row 1
featured_post post = new featured_post();
adapter.add(post);
//Row 2
featured_post post1 = new featured_post();
adapter.add(post1);
//Row 3
featured_post post2 = new featured_post();
adapter.add(post2);
return view;
}
}
내 첫 어댑터를 호출 이 광고 인 이유에
public class recycler_adapter extends RecyclerView.Adapter<recycler_adapter.MyViewHolder> {
private List<featured_post> featuredList;
private Context context;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView text;
public MyViewHolder(View view) {
super(view);
this.text = view.findViewById(R.id.my_text);
}
}
public recycler_adapter(Context context,List<featured_post> featuredList) {
this.featuredList = featuredList;
this.context = context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(context).inflate(R.layout.recycler_activity,null);
MyViewHolder viewHolder = new MyViewHolder(itemView);
return viewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder,int position) {
featured_post featured_post = featuredList.get(position);
holder.text.setText(featured_post.string);
}
@Override
public int getItemCount() {
return featuredList.size();
}
어떤 도움을 : 리사이클 adapater가 :
public class featuredAdapter extends ArrayAdapter<featured_post>{
private List<featured_post> featured_postList = new ArrayList<>();
private RecyclerView recyclerView;
private recycler_adapter adapter;
private Context context;
public featuredAdapter(Context context, ArrayList<featured_post> users){
super(context,0,users);
this.context=context;
}
public View getView(int position, View convertView, ViewGroup parent) {
featured_post post_item = getItem(position);
if(convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.featured_fragment_activity, parent, false);
recyclerView = convertView.findViewById(R.id.featured_recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
adapter = new recycler_adapter(context,featured_postList);
recyclerView.setAdapter(adapter);
featured_post post = new featured_post(Integer.toString(position));
featured_postList.add(post);
}
return convertView
}
}
그런 다음, 최종 어댑터가 recycler_adapter
라는 이름의 (을 만들 때이 어댑터를 용서하십시오, 나는 매우 혼란스러워했다) 여러 항목을 땡땡이 크게 감사 할 것입니다.
편집 : featuredAdapter
내부의 getView
메서드 시작 부분에있는 목록을 지워서이 문제를 해결했습니다. 그러나 다음과 같은 오류가 표시됩니다.
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 2(offset:2).state:4
왜 갑자기 이런 일이 발생하는지 알고 싶습니다.
새로운 recycler_adapter를 초기화하고 featured_postList를 인수로 전달할 때 잘못된 것으로 보입니다. 그런 다음 또 다른 postList를 추가하면 다음 번에 getView가 호출 될 때 논리적인데, featured_postList는 이전 목록 항목보다 하나 더 많은 요소를 갖습니다. – Vigen
scroll horizonal [nested-recycler-view] (https :// /github.com/msahakyan/nested-recycler-view). 이 어댑터를 직접 사용했고 유용했습니다. – Erik
@Vigen breakpoint를 사용하여 recyclerVIew를 디버그하고 잘못되는 부분을 볼 수는 있지만 무작위로 동작 할 수 있기를 바랍니다. 메서드를 호출 할 횟수를 절대 알지 못합니다. –