2017-09-19 12 views
0

日付を選択すると、incomefragexpenditurefragをリフレッシュしようとしています。ここに私がしたことがあります。日付の変更に応じて変更されるのではなく、別のタブが選択されたときに変更されます。メインアクティビティの変更に応じて、タブ付きアクティビティのフラグメントをリフレッシュするには

フラグメントを呼び出すアクティビティ。コードは200行以上のため、imp部分だけを貼り付けているためです。 このアクティビティでは、開始日と終了日を選択します。 incomefragexpenditurefragを日付の変更に応じて変更し、タブ間をスライドさせないようにします。

// extends AppComactActivity 
private void setupViewPager(final ViewPager viewPager) { 
    SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new IncomeCatFrag(), "Income"); 
    adapter.addFragment(new ExpenditureCatFrag(), "Expenditure"); 
    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int i, float v, int i1) { 

     } 

     @Override 
     public void onPageSelected(int i) { 
      viewPager.getAdapter().notifyDataSetChanged(); 
     } 

     @Override 
     public void onPageScrollStateChanged(int i) { 

     } 
    }); 

} 

SectionsPageAdapter

public class SectionsPageAdapter extends FragmentStatePagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 
    public SectionsPageAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

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

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 
} 

これが私のincomefragです。支出fragも似ています。 (変更が発生したときに今までに)意図をbroascastためにあなたのメインの活動のすべての 利用LocalBroadcastManagerの

//extends Fragment 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.income_frag, container, false); 
    populate1(); // implemented later. searches through db to fill textviews etc. 
    return view; 
} 

答えて

0

最初。

第二ステップ:あなたがそのフラグメントに関連するviewPagerにあなたのタブの数を設定するタブ付きアクティビティでの放送を受信後 :あなたが主な活動

第三段階から放送の意図を受け取るために活動をタブ付きで は、放送受信機を登録します。 e、g viewPager.setCurrentItem(あなたのタブ番号)

MainActivity{ //send your broadcast when date changes 
      `Intent intent = new Intent("my_date_change_intent_name"); 
      intent.putExtra("key", "dateChanged"); 
      LocalBroadcastManager.getInstance(context).sendBroadcast(intent); }` 


TabbedActivity{//register your broadcast receiver and receive broadcasts 
LocalBroadcastManager.getInstance(context).registerReceiver(MyReceiver,new IntentFilter("my_date_change_intent_name"))`; 
BroadcastReceiver MyReceiver = new BroadcastReceiver() { 
@Override 
public void onReceive(Context context, Intent intent) { 
if (intent != null) { 
String str= intent.getStringExtra("key"); 
//Now set your tab number on viewPager 
viewPager.setCurrentItem(YOUR_TAB_NUMBER) 
} 
} 
} 
}); 
関連する問題