在Android中自行调用片段

时间:2014-03-05 06:12:22

标签: android android-intent android-fragments

我有一个片段我在其中发送HTTP请求以获取数据并在页面上显示数据。之后点击按钮我想刷新这个片段。我的意思是再说一次点击按钮我想发送HTTP请求以从服务器获取新数据并将数据显示到片段中。

这是按钮点击

btn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        dialog.dismiss();
    }
});

FragmentCall

fragTran.replace(R.id.content_frame, mainFrag);
fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragTran.addToBackStack(null);
fragTran.commit();

这就是我们以前调用Fragments的方法,这是一种正确的方法

在解除对话后,我想再次调用相同的片段。

3 个答案:

答案 0 :(得分:2)

所以你想要与新数据相同的片段。 让我们假设您在名为MyData的类的对象中有新数据

现在您可以做的是,在收到的数据上重新加载您的片段。其中重新加载意味着再次设置数据。

案例:您获得了片段之外的数据。如何使用该数据刷新片段

步骤1:保持片段实例可用于您的活动。

步骤2:创建一个方法relaodFragment,如下面[在你的片段中]给出的。

 public void reloadFragment(MyData data) {
        if (data != null) {
            //reload your views with new data. using setters of all views.

      }
}

第3步:每当您感觉自己拥有新数据时,请调用此方法。

案例2:在相同片段上检索数据:

让你按照这样的方式实施:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Gson gson = new Gson();
      MyData data =gson.fromJson(getDataFromServer(param1, param2), MyData.class);
         populateViewsWithData(data);

}

public void populateViewsWithData(MyData data)
{

    // set data to views ..............
}


    public String  getDataFromServer(String param1,String param2)
    {

        // your logic to retrive data ... this method returns JSON you want to work with .. 
    }


    @Override
    public void onClick(View view) {


        Gson gson = new Gson();
         MyData data =gson.fromJson(getDataFromServer(param1, param2), MyData.class);
         populateViewsWithData(data);
         // congrates!.. fragment is reloaded again............

    }

答案 1 :(得分:0)

setHasOptionsMenu(true);

中写下此内容(onCreateView();
@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.refresh_menu, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.menu_refresh) {
            REFRESH YOUR JSON
            return true;
        } else {
            return false;
        }
    }

答案 2 :(得分:0)

您不需要以新的方式调用相同的片段。相反,您可以通过加载新数据来刷新视图。为此类要求设计的PullToRefresh库,您可以再次调用api并刷新视图。此库不仅适用于listview,还适用于包含GridView, ScrollView and WebView

的视图