我有一個ViewPager與兩個片段。我想做的事;如何從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);
}
這是在Calculator Fragment中。如果用戶從圖庫中選取了一張新照片,則會調用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不會更新。
感謝您的幫助!
能否請您提供一個代碼段? –
我認爲回調應該起作用,你可以在你使用回調的地方發佈你的代碼嗎? –
您可以使用LocalBroadcastManager請參閱示例這裏http://stackoverflow.com/questions/8802157/how-to-use-localbroadcastmanager –