我有一个带有两个片段的ViewPager。我想做的事;
更改ImageView的图片并从另一个片段更改TextView的某些属性。
我试过这样做:
这是在我的SettingsFragment.java中。从这个片段我想改变CalculatorFragment的一些视图。当用户从库中选择图片时,将调用OnActivityResult方法。如果调用此方法,我将保存此图片,然后调用'回调方法'所以MainActivity知道用户从图库中选择一张新图片。
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == getActivity().RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
try {
imageSaver.save(MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), data.getData()));
} catch (IOException e) {
e.printStackTrace();
}
settingsFragmentCallback.newMessage(NEW_PICTURE);
}
}
}
public interface SettingsFragmentCallback{
void newMessage(String message);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
settingsFragmentCallback = (SettingsFragmentCallback) context;
} catch (ClassCastException e){
}
}
这是我的MainActivity。在这里,我从Settings Fragment收到消息,当我收到它时,我调用Calculator Fragment getMessage方法,因此这个Fragment知道用户从库中选择一张图片。
public class MainActivity extends FragmentActivity implements
SettingsFragment.SettingsFragmentCallback {
@Override
public void newMessage(String message) {
CalculatorFragment cf = (CalculatorFragment)
getSupportFragmentManager().findFragmentById(R.id.fragmentCalculator);
cf.getMessage(message);
}
这是在计算器片段中。如果用户从库中选择了一张新图片,则会调用setbackground方法。
private void setBackground(){
final Bitmap bitmap = imageSaver.load();
if(bitmap != null){
imageViewBackground.setImageBitmap(bitmap);
}
}
public void getMessage(String message){
switch (message){
case SettingsFragment.NEW_PICTURE:
setBackground();
break;
default:
break;
}
}
我调试了它并且它工作正常(它来自setBackground方法)但由于某种原因,ImageView没有更新。图像本身已正确加载保存,但ImageView根本不会更新。
感谢您的帮助!
答案 0 :(得分:0)
由于两个片段在同一个Activity
中,因此在Activity
类中添加一个方法,并在想要更改其他片段内的内容时从一个片段调用它。在触摸UI之前,请确保并通过调用isAdded()
方法检查要对其进行更改的片段“添加”到活动中。
答案 1 :(得分:0)
假设您有两个片段FragmentA和Fragment B. 现在FragmentA有一些ImageView和TextView,你想从FragmentB改变。假设在ViewPager中,FragmentA位于0位,FragmentB位于位置1。 现在,当您想要更改数据时,请执行以下操作:
View view = yourViewPager.getChildAt(0);
((ImageView) view.findViewById(R.id.idOfImageView)).setImageResource(yourResource);
((TextView) view.findViewById(R.id.idOfTextView)).setText("Your Text");