-1
我实现了一个持有6片段的FragmentStatePagerAdapter。 对于第一个片段,我在array.xml中定义了9个元素。它还显示了9个元素,但我意识到它只显示前5个元素正确,然后从第一个元素开始。CustomAdapter的奇怪行为
这是片段:
public class FragArme extends ListFragment {
String[] exercise;
String[] muscles;
List<RowItem> rowItems;
View root;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
root = inflater.inflate(R.layout.frag_list_video, container, false);
return root;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
rowItems = new ArrayList<RowItem>();
exercise = getResources().getStringArray(R.array.arms);
muscles = getResources().getStringArray(R.array.arms_muscles);
for (int i = 0; i < exercise.length; i++) {
RowItem item = new RowItem(exercise[i], muscles[i]);
rowItems.add(item);
}
CustomAdapter adapter = new CustomAdapter(getActivity(), rowItems);
setListAdapter(adapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
getActivity().setContentView(R.layout.act_video_view);
if (position == 0) {
VideoView myVideoView = (VideoView) getActivity().findViewById(R.id.myvideoview);
myVideoView.setVideoPath("android.resource://" + getActivity().getPackageName() + "/" + R.raw.test);
myVideoView.setMediaController(new MediaController(getActivity()));
myVideoView.requestFocus();
myVideoView.start();
}
}
}
在调试我看到rowItems具有正确的9个项目。
的问题发生在我的CustomAdapter:
public class CustomAdapter extends BaseAdapter {
Context context;
List<RowItem> rowItems;
public CustomAdapter(Context context, List<RowItem> rowItems) {
this.context = context;
this.rowItems = rowItems;
}
@Override
public int getCount() {
return rowItems.size();
}
@Override
public Object getItem(int position) {
return rowItems.get(position);
}
@Override
public long getItemId(int position) {
return rowItems.indexOf(getItem(position));
}
/* private view holder class */
private class ViewHolder {
TextView exercise;
TextView muscles;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_video, null);
holder = new ViewHolder();
holder.exercise = (TextView) convertView.findViewById(R.id.exercise);
holder.muscles = (TextView) convertView.findViewById(R.id.muscles);
RowItem row_pos = rowItems.get(position);
holder.exercise.setText(row_pos.getExercise());
holder.muscles.setText(row_pos.getMuscles());
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}
}
位置4之后,它以0位置重新开始我不明白这一点。
你有什么想法吗?
很明显,这是因为回收,你基本上什么也不做,当视图被重用......你如果执行模式ViewHolder是错误的。 – Selvin
好的,我在这里做错了什么? –
当convertView!= null时,你什么都不做。请检查任何ViewHolder示例以查看您应该执行的操作。 – Selvin