1

私はアンドロイド開発に不慣れで、現在この厄介な問題に何日も苦労しています。グーグルと多くの記事を試しました。誰も助けませんでした。また、いくつかのオンライン ヘルプについて IRC を試しましたが、明確な回答が得られませんでした。たぶん、あなたは私を正しい方向に向けることができます...

私のアプリは基本的に、単一の Fragment クラスを保持する ViewPager です。Fragment クラス内には、位置に基づいてリソース フォルダーからどのイメージを読み込むかを決定する switch case ブロックがあります。問題は、現在の画像に従って更新する必要がある親アクティビティに TextView ビューがあることです。画像のタイトルのように。私が使用した:

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

onCreateView() で、フラグメント内からその TextView へのアクセスを取得します。そして追加:

tv.setText("Picture 1");

たとえば、スイッチ ケース ブロックに。このようにして、画像が表示されると、テキスト ビューが更新されます。問題は、各スライドで新しいフラグメントを取得するメソッド、親アクティビティの getItem(int position) が 2 回呼び出されて、複数のフラグメントをメモリにロードすることです。これにより、現在の位置が 1 int 先になります。つまり、スイッチ ケースは、たとえばケース 0 の上に立っており、特定の画像が表示されますが、テキストはケース 1 から更新されます。そのため、正しく動作させることができません。私は何を間違っていますか??

ありがとうございました

4

2 に答える 2

0

OK、コードを提供します。これはString、フラグメントからアクティビティに送信するだけでなく、他のタイプのクラスから送信するデータにも使用できます。

これは、「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 に答える