如何从 ViewPager 更改子片段 imageView
How to change child fragment imageView from ViewPager
我有ViewPager
和4个片段。片段 2 称为 StatusFragment
。在那个 StatusFragment
我有一个 ImageView
。在 ViewPager
中,我得到了 bundle
的字符串,这是一个图像路径。我成功地获得了我的包,但现在我需要用位图解码我的路径并将其添加到 StatusFragment
的 ImageView
中。我尝试从 StatusFragment
public 执行 ImageView
,然后将其从 ViewPager
更改,但结果是 NullPointerException
。如何从 ViewPager
更改该图像?谢谢。
这里是 ViewPager 代码。
public class SlidePageTabsMainFragment extends BaseFragment {
private View mainView;
private TabLayout mTabs;
private ViewPager mPage;
private FragmentActivity myContext;
private CoordinatorLayout coordinatorLayout;
private StatusFragment statusFragment;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.slide_page_tabs_main_fragment, container, false);
mTabs = (TabLayout) mainView.findViewById(R.id.tab_layout);
mPage = (ViewPager) mainView.findViewById(R.id.view_pager);
coordinatorLayout = (CoordinatorLayout) mainView.findViewById(R.id.coordinator_layout_id);
mPage.setOffscreenPageLimit(3);
//mTabs.setupWithViewPager(mPage);
SetUpViewPager();
getTabLayoutLocation();
setmFloatingActionButtons();
Bundle getBundleImagePath = getArguments();
if(getBundleImagePath != null){
String getImagePaths = getBundleImagePath.getString("imagePath");
Toast.makeText(myContext, getImagePaths, Toast.LENGTH_SHORT).show();
Bitmap imageBitmap = BitmapFactory.decodeFile(getImagePaths);
//statusFragment.photoId.setImageBitmap(imageBitmap);
mPage.setCurrentItem(1);
}
return mainView;
}
}
@Override
public String toString() {
return "SlidePageTabsMainFragment";
}
public void SetUpViewPager() {
//Add fragments
SlidePageTabsAdapter adapter = new SlidePageTabsAdapter(getChildFragmentManager());
adapter.addFragment(new SupportopFragment());
adapter.addFragment(new StatusFragment());
adapter.addFragment(new ConnectionsFragment());
adapter.addFragment(new SupportersFragment());
//Setting adapter
mPage.setAdapter(adapter);
mTabs.setupWithViewPager(mPage);
//Setting icons in tabs
mTabs.getTabAt(0).setIcon(R.drawable.supportop_icon);
mTabs.getTabAt(1).setIcon(R.drawable.repair_icon);
mTabs.getTabAt(2).setIcon(R.drawable.transport_icon);
mTabs.getTabAt(3).setIcon(R.drawable.security_icon);
//mPage.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabs));
mPage.addOnPageChangeListener(pageChangeListener);
// mTabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mPage));
}
}
好的,那是一个有点大的代码,但我想你已经理解了。
现在我将添加 StatusFragment。
public class StatusFragment extends BaseFragment {
private View mainView;
public ImageView photoId;
private SlidePageTabsMainFragment slidePages;
public StatusFragment() {};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.status_fragment, container, false);
photoId = (ImageView) mainView.findViewById(R.id.photo_id);
slidePages = new SlidePageTabsMainFragment();
return mainView;
}
@Override
public String toString() {
return "StatusFragment";
}
}
好的,现在当您观看代码时,如果我在 ViewPager
中获取捆绑包,我该如何从 ViewPager
更改 photoId
图像?不要说要在 StatusFragment
中获取捆绑包。我只需要在 ViewPager
中获取它。谢谢。
只需将包含位图的 StatusFragment 捆绑到其中。 Bitmap 实现了 Parcelable,因此它可以存储在 Bundle 中:
在SlidePageTabsMainFragment
public void setUpViewPager(Bitmap b) {
Bundle args = new Bundle();
args.putParcelable("image", b);
//... your code
// Add arguments to the Fragment
Fragment statusFragment = new StatusFragment();
statusFragment.setArguments(args);
//...
adapter.addFragment(statusFragment);
//...
}
在 StatusFragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.status_fragment, container, false);
photoId = (ImageView) mainView.findViewById(R.id.photo_id);
// Get the Bitmap and set it to the ImageView
Bundle bundle = getArguments();
Bitmap image = (Bitmap) bundle.getParcelable("image");
photoId.setImageBitmap(image);
slidePages = new SlidePageTabsMainFragment();
return mainView;
}
我有ViewPager
和4个片段。片段 2 称为 StatusFragment
。在那个 StatusFragment
我有一个 ImageView
。在 ViewPager
中,我得到了 bundle
的字符串,这是一个图像路径。我成功地获得了我的包,但现在我需要用位图解码我的路径并将其添加到 StatusFragment
的 ImageView
中。我尝试从 StatusFragment
public 执行 ImageView
,然后将其从 ViewPager
更改,但结果是 NullPointerException
。如何从 ViewPager
更改该图像?谢谢。
这里是 ViewPager 代码。
public class SlidePageTabsMainFragment extends BaseFragment {
private View mainView;
private TabLayout mTabs;
private ViewPager mPage;
private FragmentActivity myContext;
private CoordinatorLayout coordinatorLayout;
private StatusFragment statusFragment;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.slide_page_tabs_main_fragment, container, false);
mTabs = (TabLayout) mainView.findViewById(R.id.tab_layout);
mPage = (ViewPager) mainView.findViewById(R.id.view_pager);
coordinatorLayout = (CoordinatorLayout) mainView.findViewById(R.id.coordinator_layout_id);
mPage.setOffscreenPageLimit(3);
//mTabs.setupWithViewPager(mPage);
SetUpViewPager();
getTabLayoutLocation();
setmFloatingActionButtons();
Bundle getBundleImagePath = getArguments();
if(getBundleImagePath != null){
String getImagePaths = getBundleImagePath.getString("imagePath");
Toast.makeText(myContext, getImagePaths, Toast.LENGTH_SHORT).show();
Bitmap imageBitmap = BitmapFactory.decodeFile(getImagePaths);
//statusFragment.photoId.setImageBitmap(imageBitmap);
mPage.setCurrentItem(1);
}
return mainView;
}
}
@Override
public String toString() {
return "SlidePageTabsMainFragment";
}
public void SetUpViewPager() {
//Add fragments
SlidePageTabsAdapter adapter = new SlidePageTabsAdapter(getChildFragmentManager());
adapter.addFragment(new SupportopFragment());
adapter.addFragment(new StatusFragment());
adapter.addFragment(new ConnectionsFragment());
adapter.addFragment(new SupportersFragment());
//Setting adapter
mPage.setAdapter(adapter);
mTabs.setupWithViewPager(mPage);
//Setting icons in tabs
mTabs.getTabAt(0).setIcon(R.drawable.supportop_icon);
mTabs.getTabAt(1).setIcon(R.drawable.repair_icon);
mTabs.getTabAt(2).setIcon(R.drawable.transport_icon);
mTabs.getTabAt(3).setIcon(R.drawable.security_icon);
//mPage.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabs));
mPage.addOnPageChangeListener(pageChangeListener);
// mTabs.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mPage));
}
}
好的,那是一个有点大的代码,但我想你已经理解了。
现在我将添加 StatusFragment。
public class StatusFragment extends BaseFragment {
private View mainView;
public ImageView photoId;
private SlidePageTabsMainFragment slidePages;
public StatusFragment() {};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.status_fragment, container, false);
photoId = (ImageView) mainView.findViewById(R.id.photo_id);
slidePages = new SlidePageTabsMainFragment();
return mainView;
}
@Override
public String toString() {
return "StatusFragment";
}
}
好的,现在当您观看代码时,如果我在 ViewPager
中获取捆绑包,我该如何从 ViewPager
更改 photoId
图像?不要说要在 StatusFragment
中获取捆绑包。我只需要在 ViewPager
中获取它。谢谢。
只需将包含位图的 StatusFragment 捆绑到其中。 Bitmap 实现了 Parcelable,因此它可以存储在 Bundle 中:
在SlidePageTabsMainFragment
public void setUpViewPager(Bitmap b) {
Bundle args = new Bundle();
args.putParcelable("image", b);
//... your code
// Add arguments to the Fragment
Fragment statusFragment = new StatusFragment();
statusFragment.setArguments(args);
//...
adapter.addFragment(statusFragment);
//...
}
在 StatusFragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.status_fragment, container, false);
photoId = (ImageView) mainView.findViewById(R.id.photo_id);
// Get the Bitmap and set it to the ImageView
Bundle bundle = getArguments();
Bitmap image = (Bitmap) bundle.getParcelable("image");
photoId.setImageBitmap(image);
slidePages = new SlidePageTabsMainFragment();
return mainView;
}