2012-04-24 11 views
6

私のアンドロイドアプリの状況があります。ビューアアダプタを使用しています.3つのページが実際にフラグメントです。私の問題は、ダイアログアクティビティからこれらを更新します。フラグメントを更新するonclickイベントのリストを含むダイアログアクティビティ。別のアクティビティを通してviewpageadapterのフラグメントをリフレッシュする方法

まず、チップインして私を助けてください。

乾杯 のGaurav

これは私の見解ページアダプター

/* 
* Copyright (C) 2012 Gaurav Rawat 
* 
*/ 
package com.punksrant.ifinddryday.adapter; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

import com.punksrant.ifinddryday.fragment.AllFragment; 
import com.punksrant.ifinddryday.fragment.HomeFragment; 
import com.punksrant.ifinddryday.fragment.SynchFragment; 
import com.punksrant.ifinddryday.utils.IFindDryDaysConstants; 
import com.viewpagerindicator.TitleProvider; 

public class ViewPagerAdapter extends FragmentPagerAdapter implements 
     TitleProvider { 

    private static String[] titles = IFindDryDaysConstants.titles; 

    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public String getTitle(int position) { 
     return titles[position % titles.length].toUpperCase(); 
    } 

    @Override 
    public int getCount() { 
     return titles.length; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment; 
     switch (position) { 
     case 0: 
      fragment = HomeFragment.newInstance(); 
      break; 
     case 1: 
      fragment = AllFragment.newInstance(); 
      break; 

     case 2: 
      fragment = SynchFragment.newInstance(titles[position 
        % titles.length]); 
      break; 

     default: 
      fragment = HomeFragment.newInstance(); 
     } 
     return fragment; 
    } 

} 
' and in this I want to refresh the home fragment from my dialog class 
'/* 
* Copyright (C) 2012 Gaurav Rawat 
* 
*/ 
package com.punksrant.ifinddryday.activity; 

import roboguice.inject.ContentView; 
import roboguice.inject.InjectView; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import com.github.rtyley.android.sherlock.roboguice.activity.RoboSherlockFragmentActivity; 
import com.google.inject.Inject; 
import com.punksrant.ifinddryday.model.Coordinates; 
import com.punksrant.ifinddryday.utils.DryDayJSONResParser; 
import com.punksrant.ifinddryday.utils.IFindDryDayViewUtils; 

@ContentView(R.layout.statedialog) 
public class Dialog extends RoboSherlockFragmentActivity { 
    @InjectView(R.id.dialogList) 
    ListView listView; 
    @Inject 
    SharedPreferences preferences; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     String[] states = DryDayJSONResParser.getSupportedStates(); 
     listView.setAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, android.R.id.text1, states)); 
     listView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       String state = ((TextView) view).getText().toString(); 
       Coordinates coordinates = IFindDryDayViewUtils 
         .getCoordinatesFromPreferences(preferences); 
       coordinates.setState(state); 
       IFindDryDayViewUtils.updateCityFromLocation(coordinates, 
         preferences); 

       finish(); 
      } 

     }); 
    } 
}, 
+0

あなたのビューページアダプタはどこですか?ビューページを保持するアクティビティのコードを投稿できますか? – gutiory

+0

こんにちは@gutioryは、一度家に戻ってコードを貼り付けますが、実際にはjistはJakeのViewPagerIndicatorライブラリを使用しています.https://github.com/JakeWharton/Android-ViewPagerIndicator fragmentpageadapterからフラグメントが追加されています。戻りました。 –

+0

これは私のビューページアダプターです –

答えて

1

(クレジットがrui.araujoをblahdiblahするために)これを実現する方法はいくつかあり 。

最初のオプションは簡単ですが、もう少し非効率です。このようなあなたのPagerAdapter

オーバーライドgetItemPosition

public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

この方法では、あなたがnotifyDataSetChanged()を呼び出すときに、ビューのページャは、すべてのビューを削除し、それらのすべてをリロードします。したがって、リロード効果が得られる。

suggested by alvarolbは、新しいビューをインスタンス化するときにinstantiateItem()setTag()メソッドになります。 notifyDataSetChanged()を使用する代わりに、findViewWithTag()を使用して、更新するビューを見つけることができます。

第2のアプローチは、非常に柔軟で高性能です。元の研究のためのalvarolbへの誇り。

関連する問題