如何基于ViewPager中的当前ImageView更新parant Activity中的TextView

时间:2013-04-06 08:50:46

标签: java android android-fragments

我是Android开发人员的新手,我目前正在努力解决这个恼人的问题好几天。 尝试谷歌和许多文章。没人帮忙。还尝试了IRC的一些在线帮助,但无法得到一个直接的答案。也许你可以指引我朝着正确的方向前进......

我的应用程序基本上是一个包含单个Fragment类的ViewPager。在Fragment类中,有一个switch case块,它根据位置确定要从resources文件夹加载哪个图像。问题是,我的父Activity中有一个TextView视图需要根据当前图片进行更新。像图像标题。 我用过:

TextView tv = (TextView) getActivity().findViewById(R.id.titleTV);

在onCreateView()中从Fragment中访问该TextView。并补充说:

tv.setText("Picture 1");
例如,到switch case block。这样,当显示图片时,文本视图会更新。 问题是,在父Activity中使用每个幻灯片getItem(int position)检索新Fragment的方法会被调用两次,以将多个Fragment加载到内存中。这导致当前位置为前一个int。意思是,例如,开关盒位于盒子0上,它显示一个特定的图片,但文本从案例1更新。 因此,我无法让它正常工作。 我做错了什么?

谢谢

2 个答案:

答案 0 :(得分:0)

好的我会给出一段代码,你可以使用它,不仅仅用于String,而是用于从Fragment发送到Activity的所有数据,甚至是其他类型的数据彼此之间的课程。

这就是代码的类型也用在.'setOnSomethingHappenListener(listener);'

public interface TitleChangeListener{
   public void onTitleChanged(String title);
}

然后根据您的活动

public class MyActivity extends Activity implements TitleChangeListener{

    @Override
    onTitleChanged(String title){
          // set here your value
    }

}

然后在你的片段上

public void MyFragment extends Fragment{

    private TitleChangeListener listener;

    @Override
    public void onAttach(Activity activity){
        if(activity instanceof TitleChangeListener)
            listener = (TitleChangeListener)activity;
        else
            // throw some error ???
    }

    @Override
    public void onResume(){
        listener.onTitleChanged("my title");
    }

}
记得我心里输入了所有这些,肯定会有一些小错误。 但是按照这个想法,你会没事的。

答案 1 :(得分:0)

如果您只能根据当前片段位置确定文本,则可以使用ViewPager.OnPageChangeListener。在您的Activity中实现该接口并通过调用mViewPager.setOnPageChangeListener(SomeOnPageChangeListener)来使用它。使用TextView方法确定放入OnPageChangeListener.onPageSelected()的文字。

不幸的是,SDK中有bug,而第一次显示时,第0位的页面没有调用onPageSelected()。您可以在上述链接下找到解决方法,使用ViewPager.setCurrentPage(1)或只在onCreate()方法中手动设置该位置的文字。

示例代码:

//activity onCreate()
protected void onCreate(Bundle savedInstanceState) {
    ...
    mTextView = (TextView) findViewById(R.id.text_view);
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mPagerAdapter);
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
                String someText = determineText(position)
                mTextView.setText(someText);

    });

    //because onPageSelected will not be called for page 0 first time
    String someText = determineText(0)
    mTextView.setText(someText);
}

private String determineText(int position){ //static?
    //switch?
}