1

我是 android dev 的新手,我目前正在为这个烦人的问题苦苦挣扎好几天。尝试了谷歌和许多文章。没有任何帮助。还尝试了 IRC 以获得一些在线帮助,但无法得到直接的答案。也许你可以指引我正确的方向......

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

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

在 onCreateView() 中以从 Fragment 中访问该 TextView。并添加了一个:

tv.setText("Picture 1");

例如,到 switch case 块。这样,当显示图片时,文本视图就会更新。问题是,在每张幻灯片中检索一个新片段的方法,即父 Activity 中的 getItem(int position),被调用两次以将多个片段加载到内存中。这会导致当前位置提前 1 个整数。意思是,例如,开关案例站在案例 0 上,它显示了一张特定的图片,但文本从案例 1 更新。因此,我无法让它正常工作。我究竟做错了什么??

谢谢

4

2 回答 2

0

好的,我将给出一段代码,您可以使用它,不仅可以用于 a,还可以用于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");
    }

}

请记住,我把所有这些都记下来了,肯定会有一些小错误。但只要按照这个想法,你会没事的。

于 2013-04-06T09:55:54.383 回答
0

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

不幸的是,SDK 中存在一个错误,并且第一次显示位置 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?
}
于 2013-04-06T11:13:58.537 回答