2016-07-26 78 views
1

我有MainActivity其中添加兩個選項卡即「A」,「B」這兩個選項卡發送一些請求到服務器選項卡「A」是一個片段和選項卡「B」也是一個片段,問題是,當MainActivity啓動兩個選項卡發送服務器請求,默認情況下,tab1對用戶是可見的,但是當tab 2可見時我想要什麼,然後tab2發送請求到server.pls幫助我。在活動開始選項卡發送服務器請求在Android?

mainactivity代碼: -

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) { 

     } 
    }); 

TAB2代碼: -

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); 
} 

回答

2

當您設置viewpager適配器,TAB2的onCreateView也將被調用。因此它發送請求。

覆蓋的片段方法: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 
    } 
} 

}

+0

由於madhuri ....其工作 – Siddharth

0

查看傳呼機保留一些頁面兩側,這樣的滑動頁面顯示,無負載。 ViewPager的偏移極限是默認0

setOffscreenPageLimit(INT限制): 集應當保留在視圖層次結構的當前頁面的任一側在空閒狀態的頁數。

但設置viewpager.setOffscreenPageLimit(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 
    } 
}