我想使用ViewPager
创建一个图库,并在this source code中精确解释ViewPager
视图下方的缩略图。
但我的问题是,我的类是片段而不是Activity,类扩展DialogFragment
。我很困惑如何做到这一点。我无法解决此错误:
对于Fragment
类型,方法getSupportFragmentManager()未定义
我知道我不能在Fragment中使用getSupportFragmentManager()
但我也不能使用getFragmentManager(
)。如何解决这个问题?有人请帮忙。
我的适配器类:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import java.util.List;
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private List<Integer> images;
public ViewPagerAdapter(FragmentManager fm, List<Integer> imagesList) {
super(fm);
this.images = imagesList;
}
@Override
public Fragment getItem(int position) {
return PageFragment.getInstance(images.get(position));
}
@Override
public int getCount() {
return images.size();
}
}
适配器实例化:
ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager(), images);
viewPager.setAdapter(adapter);
答案 0 :(得分:2)
我在这里所做的是创建了一个DummyFragment
扩展DialogFragment
并将所有代码从MainActivity
移到Fragment
,您可以检查文件,其余文件与您提供的代码链接相同
<强> MainActivity 强>
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_dummy);
getSupportFragmentManager().beginTransaction().replace(R.id.container, DummyFragment.newInstance()).commit();
}
}
<强> layout_dummy.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</FrameLayout>
DummyFragment //您的对话片段
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
/**
* Created by Satyen on 11/16/15.
*/
public class DummyFragment extends DialogFragment {
View view;
private ArrayList<Integer> images;
private BitmapFactory.Options options;
private ViewPager viewPager;
private View btnNext, btnPrev;
private FragmentStatePagerAdapter adapter;
private LinearLayout thumbnailsContainer;
private final static int[] resourceIDs = new int[]{R.mipmap.a, R.mipmap.b,
R.mipmap.c, R.mipmap.d, R.mipmap.e, R.mipmap.f, R.mipmap.g};
public static DummyFragment newInstance() {
DummyFragment dummyFragment = new DummyFragment();
return dummyFragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.activity_main, container, false);
images = new ArrayList<>();
//find view by id
viewPager = (ViewPager) view.findViewById(R.id.view_pager);
thumbnailsContainer = (LinearLayout) view.findViewById(R.id.container);
btnNext = view.findViewById(R.id.next);
btnPrev = view.findViewById(R.id.prev);
btnPrev.setOnClickListener(onClickListener(0));
btnNext.setOnClickListener(onClickListener(1));
setImagesData();
// init viewpager adapter and attach
adapter = new ViewPagerAdapter(getChildFragmentManager(), images);
viewPager.setAdapter(adapter);
inflateThumbnails();
return view;
}
private View.OnClickListener onClickListener(final int i) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
if (i > 0) {
//next page
if (viewPager.getCurrentItem() < viewPager.getAdapter().getCount() - 1) {
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
}
} else {
//previous page
if (viewPager.getCurrentItem() > 0) {
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
}
}
}
};
}
private void setImagesData() {
for (int i = 0; i < resourceIDs.length; i++) {
images.add(resourceIDs[i]);
}
}
private void inflateThumbnails() {
for (int i = 0; i < images.size(); i++) {
View imageLayout = getActivity().getLayoutInflater().inflate(R.layout.item_image, null);
ImageView imageView = (ImageView) imageLayout.findViewById(R.id.img_thumb);
imageView.setOnClickListener(onChagePageClickListener(i));
options = new BitmapFactory.Options();
options.inSampleSize = 3;
options.inDither = false;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), images.get(i), options );
imageView.setImageBitmap(bitmap);
//set to image view
imageView.setImageBitmap(bitmap);
//add imageview
thumbnailsContainer.addView(imageLayout);
}
}
private View.OnClickListener onChagePageClickListener(final int i) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(i);
}
};
}
}
答案 1 :(得分:1)
答案 2 :(得分:0)
我的类是Fragment而不是Activity,类扩展 DialogFragment。我很困惑如何做到这一点。我无法解决这个问题 错误:
在这种情况下,您必须直接使用getFragmentManager()
。如果您的Fragment来自支持包,Android将返回支持片段管理器。在这种情况下,我认为您可能想要使用getChildFragmentManager()
。
答案 3 :(得分:0)
您有多个选项。不确定哪种情况最适合您的情况。
1)。 (可能你需要的)fragment.getChildFragmentManager()
将返回片段的嵌套片段管理器。它通常用于向其他片段添加/替换片段,因此分页是类似的情况。
2)getActivity().getFragmentManager() / getActivity().getSupportFragmentManager()
将返回Activity
的片段管理器(用于直接在activity
布局上添加/替换片段