-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