在活动开始选项卡上,在android中发送服务器请求



我有MainActivity,它添加了两个选项卡,即"A"、"B",这两个选项卡都向服务器发送一些请求。选项卡"A"是一个片段,选项卡"B"也是一个片段。问题是,当MainActivity启动两个选项卡时,默认情况下,tab1对用户可见,但我想要的是,当tab2可见时,tab2向服务器发送请求。

主要活动代码:-

    m_TabLayout = (TabLayout) findViewById(R.id.tab_layout);// finding Id of tablayout
    m_ViewPager = (ViewPager) findViewById(R.id.pager);//finding Id of ViewPager
    m_TabLayout.addTab(m_TabLayout.newTab().setText("Deals"));// add deal listin tab
    m_TabLayout.addTab(m_TabLayout.newTab().setText("Stories"));
    m_TabLayout.setTabGravity(TabLayout.GRAVITY_FILL);// setting Gravity of Tab

    CDealMainListingPager m_oDealMainScreenPager = new CDealMainListingPager(getSupportFragmentManager(), m_TabLayout.getTabCount());
    m_ViewPager.setAdapter(m_oDealMainScreenPager);// adiing adapter to ViewPager
    m_ViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(m_TabLayout));// performing action of page changing
    m_TabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            m_ViewPager.setCurrentItem(tab.getPosition());
        }
        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
        }
        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });

表2代码:-

    private View m_Main;
private String m_szMobileNumber, m_szEncryptedPassword;
private CAdscenMediaDealStorage m_Item;
private static ListView m_ListView;// declaring Listview variable..
private String TAG = CAdscendMediaDeal.class.getSimpleName();
Integer pubId = 105639;
Integer aswallId = 6453;
private ArrayList<CAdscenMediaDealStorage> s_oDataset;// declaring Arraylist variable
private CADscendDealAdapter m_oAdapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    m_Main = inflater.inflate(R.layout.adscend_deal_list, container, false);
    getDetail();
    init();
    return m_Main;
}
private void getDetail() {
    CLoginSessionManagement m_oSessionManagement = new CLoginSessionManagement(getActivity());// crating object of Login Session
    HashMap<String, String> user = m_oSessionManagement.getLoginDetails();// get String from Login Session
    m_szMobileNumber = user.get(CLoginSessionManagement.s_szKEY_MOBILE).trim();// getting password from saved preferences..........

}
public void init() {
    m_ListView = (ListView) m_Main.findViewById(R.id.dealList);
    s_oDataset = new ArrayList<>();
    m_ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            try {
                String url = s_oDataset.get(position).getM_Link();
                if (!url.startsWith("http://") && !url.startsWith("https://"))
                    url = "http://" + url;
                Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(myIntent);
            } catch (ActivityNotFoundException e) {
                Toast.makeText(getActivity(), "No application can handle this request."
                        + " Please install a webbrowser", Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }
        }
    });
}
@Override
public void onResume() {
    super.onResume();
    getAdscendDeal();
}
public void getAdscendDeal() {
    String url = "http://adsc.com/adwall/api/publisher/" + pubId + "/profile/" + aswallId + "/offers.json?subid1=" + m_szMobileNumber;
    JSONObject jsonObject = new JSONObject();
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, jsonObject, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.e(TAG, "Server Response::" + response);
            try {
                JSONArray post = response.optJSONArray("offers");
                for (int i = 0; i < post.length(); i++) {
                    JSONObject obj = post.getJSONObject(i);
                    m_Item = new CAdscenMediaDealStorage();
                    m_Item.setM_szHeaderText(obj.getString("name"));
                    m_Item.setM_szsubHeaderText(obj.getString("description"));
                    m_Item.setM_szDealValue(obj.getString("currency_count"));
                    m_Item.setM_szImageView(obj.getString("creative_url"));
                    m_Item.setM_Link(obj.getString("click_url"));
                    s_oDataset.add(m_Item);
                }
                if (!s_oDataset.isEmpty()) {
                    m_oAdapter = new CADscendDealAdapter(getActivity(), s_oDataset);// create adapter object and add arraylist to adapter
                    m_ListView.setAdapter(m_oAdapter);//adding adapter to recyclerview
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Server Error::" + error);
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
    requestQueue.add(jsonObjectRequest);
}

设置视图寻呼机适配器时,还会调用Tab2的onCreateView。因此,它发送请求。

重写Fragment方法:setUserVisibleHint

public class MyFragment extends Fragment {
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
       // Fragment is visible
      // make request here 
    }
    else {
     // Fragment is not visible
    }
}

}

View寻呼机在两侧保留一些页面,以便在滑动页面上显示而不加载。ViewPager的偏移限制默认为0。

setOffsetscreenPageLimit(int限制):设置应保留在视图层次结构中处于空闲状态的当前页两侧的页数。

但是设置viewpager.setOffsetscreenPageLimit(0)将不起的作用

警告:Requested offscreen page limit 0 too small; defaulting to 1尝试使用此所以用户这个

 public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // load data here
    }else{
       // fragment is no longer visible
    }
}

最新更新