如何从android中的活动刷新片段?

时间:2016-02-09 07:58:26

标签: java android android-fragments android-activity

  

我的一个片段中有一个浮动按钮。点击其中一个   弹出活动。现在问题出在我从活动回来的时候   片段片段不会自动刷新。我也想要它   按下后刷新。   在片段中,我在操作栏中有一个刷新按钮   按下我调用了一个refreshFragment()方法。是否有方法   我可以从一个片段中调用一个方法的android   活动。   这是我的refreshFragment()方法代码。

  public void refreshFragment()
    {
        Fragment fragment = new BillingFragment();
        android.support.v4.app.FragmentManager fragmentMg = getActivity().getSupportFragmentManager();
        FragmentTransaction fragmentTrans = fragmentMg.beginTransaction();
        fragmentTrans.replace(R.id.container_body, fragment, "TABBILLING");
        fragmentTrans.addToBackStack(null);
        fragmentTrans.commit();
        ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Billing");
        //adapter.notifyDataSetChanged();

    }
  

我在创建视图方法中调用它如下: -

((MainActivity)getActivity()).setFragmentRefreshListener(new MainActivity.FragmentRefreshListener()
        {
            @Override
            public void onRefresh() {
                refreshFragment();
            }
        });
  

我甚至试过调用我的主要活动的displayView()方法   通过创建MainActivity对象的另一个活动,如下所示: -

 public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                super.onBackPressed();
                MainActivity main = new MainActivity();
                main.displayView(1);
                count = 0;
                return true;
  

但它给了我一个空指针异常。这是我的displayView()方法。

 public void onDrawerItemSelected(View view, int position) {
        displayView(position);
    }

    public void displayView(int position) {
        Fragment fragment = null;

        String title = getString(R.string.app_name);
        switch (position) {
            case 0:
                fragment = new HomeFragment();
                title = getString(R.string.title_home);
                break;
            case 1:
                fragment = new BillingFragment();
                title =getString(R.string.title_billing);
                break;
            case 2:
                fragment = new StockViewFragment();
                title =getString(R.string.title_stockview);
                break;
            case 3:
                fragment = new BhishiManagementFragment();
                title= getString(R.string.title_bhishiview);
                break;
            case 4:
                fragment = new ReportingFragment();
                title=getString(R.string.title_reporting);
                break;
            case 5:
                fragment = new VendorManagementFragment();
                title=getString(R.string.title_vendormanagement);
                break;
            case 6:
                fragment = new CustomerMgmt();
                title = getString(R.string.title_custmgmt);
                break;

            default:
                break;
        }
  

感谢任何帮助。谢谢你:)。

1 个答案:

答案 0 :(得分:11)

我假设您在从活动回来时尝试刷新片段(该活动没有托管需要刷新的片段),如果我的假设是正确的,请尝试以下方法,请不要澄清问题与更多信息。

尝试:在片段中有一个布尔变量,并使用其生命周期方法根据片段可见状态更新其值true或false。

public class SampleFragment extends Fragment {

    private boolean shouldRefreshOnResume = false;

    public static SampleFragment newInstance() {
        SampleFragment fragment = new SampleFragment();
        return fragment;
    }

    public SampleFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, 
                         ViewGroup container,
                         Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_blank, 
                                              container, false);
    }

    @Override
    public void onResume() {
        super.onResume();
        // Check should we need to refresh the fragment
        if(shouldRefreshOnResume){
            // refresh fragment
        }
    }

    @Override
    public void onStop() {
        super.onStop();
        shouldRefreshOnResume = true;
    }
}