설명서에서 데모 된 조각 사이를 전환하기 위해 스 와이프를 사용하여 탭 제목 스트립을 설정하려고합니다. 최대 지점까지 작동합니다. gridview는 필요한 모든 이미지를 표시하지만 조각 1과 조각 2 모두 동일한 이미지를 표시합니다. 조각 1의 이미지를 클릭하면 조각 2의 이미지가 표시 되더라도 조각 1의 세부 정보 화면이 나타나기 때문에 조각 2가 이미지를 덮어 쓰는 것으로 나타납니다.FragmentPagerAdapter + BaseAdapter + UIL 업데이트 안 함
기본적으로 각 별도의 조각에 대해 올바른 이미지를 표시하려면 ImageAdapter (BaseAdapter)가 필요합니다. 정적 요소가없는 경우 두 번째 조각이 첫 번째 조각과 상호 작용하는 것을 볼 수 없습니다.
편집 : Picasso로 변경해 봤는데 동일한 오류가 발생하여 내 코드에 뭔가있을 수 있습니다.
Edit2 :이 부분은 answer이며 조각이 표시되면 눈금을 다시 그릴 수 있지만 눈에 띄는 깜박임이 발생하고 이미지가 틀렸음이 분명합니다. 문제는 UIL/Picasso가 다른 조각들에있는 gridview가 같은 객체 (같은 이미지를 가지고 있지만 다른 주문을 가지고 있음)라고 생각하면서 somhere에 놓여 있어야합니다.
public void setupFragmentSwipes() {
mDemoCollectionPagerAdapter =
new DemoCollectionPagerAdapter(
getFragmentManager());
mViewPager = (ViewPager) mRootView.findViewById(R.id.pager);
mViewPager.setAdapter(mDemoCollectionPagerAdapter);
}
public class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter {
String[] array = getResources().getStringArray(R.array.SortOptions);
public DemoCollectionPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment = new FragmentGrid();
Bundle args = new Bundle();
args.putInt("mMode", mMode);
args.putInt("mSortAorD", mSortAorD);
args.putInt("mSortType", i);
fragment.setArguments(args);
return fragment
}
@Override
public int getCount() {
return array.length;
}
@Override
public CharSequence getPageTitle(int position) {
return array[position];
}
}
내가 얼마 전에이 매우 유사 소리에 문제가 발생
public class FragmentGrid extends Fragment {
public int mode;
private ArrayList<Theme> mThemes;
private GridView listView;
private static DisplayImageOptions options;
protected ImageLoader imageLoader = ImageLoader.getInstance();
protected int mSavedPosition;
private int sortType;
private int sortAorD;
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
// The last two arguments ensure LayoutParams are inflated
// properly.
View rootView = inflater.inflate(
R.layout.fragment_collection_object, container, false);
Bundle args = getArguments();
mode = args.getInt("mMode", BaseConstants.ViewModes.NORMAL);
sortType = args.getInt("mSortType", BaseConstants.Sort.POPULAR);
sortAorD = args.getInt("mSortAorD", BaseConstants.Sort.DESC);
listView = (GridView) rootView.findViewById(R.id.gridview2);
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.ic_stub)
.showImageForEmptyUri(R.drawable.ic_error)
.showImageOnFail(R.drawable.ic_error)
.cacheOnDisc(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
return rootView;
}
@Override
public void onResume() {
super.onResume();
listView.setSelection(mSavedPosition);
ThemeManager tm = new ThemeManager(getActivity().getApplicationContext());
mThemes = tm.getModifiedThemeList(mode);
mThemes = tm.compare(sortType, sortAorD, checkIfTesting());
listView.setAdapter(new ImageAdapter(mThemes));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mSavedPosition = position;
Intent intent = new Intent(getActivity(), ImagePagerActivity.class);
intent.putExtra("mMode", mode);
intent.putExtra("mSortAorD", sortAorD);
intent.putExtra("mSortType", sortType);
intent.putExtra("mPosition", position);
startActivity(intent);
}
});
}
public class ImageAdapter extends BaseAdapter {
ArrayList<Theme> imageAdapterThemeList;
public ImageAdapter(ArrayList<Theme> themes) {
imageAdapterThemeList = themes;
}
@Override
public int getCount() {
int result = 0;
if (imageAdapterThemeList != null) {
result = imageAdapterThemeList.size();
}
return result;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = (ImageView) getActivity().getLayoutInflater().inflate(R.layout.item_grid_image, parent, false);
} else {
imageView = (ImageView) convertView;
}
Theme theme = imageAdapterThemeList.get(position);
imageLoader.displayImage(theme.getImageURL(), imageView, options);
return imageView;
}
}
fragment_collection_object.xml
<GridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:horizontalSpacing="4dip"
android:numColumns="auto_fit"
android:columnWidth="150dip"
android:scrollbars="vertical"
android:stretchMode="columnWidth"
android:verticalSpacing="4dip"
android:padding="4dip" />
"새로운 ArrayList를 만드는 대신 이전 버전을 가리키는 것뿐입니다."- getModifiedThemeList() 구현에 약간의 영향을 미칩니다. 이'ArrayList'을 어떻게 사용하는지 감안할 때, 배열 목록을 별도로 복사해야합니다. 복사 생성자 ('new ArrayList (themes)')를 사용하는 것이 더 쉬울 것입니다. –
CommonsWare
좋은 지적. 도움을 주셔서 감사합니다. – easycheese