如何从ViewPager中的另一个片段更改视图?

时间:2016-08-10 11:34:15

标签: android android-fragments imageview

我有一个带有两个片段的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根本不会更新。

感谢您的帮助!

2 个答案:

答案 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");