2016-07-26 4 views
1

Ich habe MainActivity, die zwei Registerkarten hinzufügen, nämlich "A", "B" beide Tabs senden einige Anfrage an den Server Tab "A" ist ein Fragment und Tab "B" ist auch ein Fragment, Problem ist, wenn MainActivity beide Registerkarte senden Server-Anfrage, standardmäßig Tab1 ist für den Benutzer sichtbar, aber was ich will, wenn Tab 2 sichtbar ist, dann Tab2 senden Anfrage an server.pls mir helfen.auf Aktivität Start Tabs Serveranfrage in Android senden?

mainactivity Code: -

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 Code: -

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

Antwort

2

Wenn Sie den viewpager Adapter-Set, onCreateView von Tab2 wird auch genannt werden. Daher sendet es die Anfrage.

Aufschalten der Fragment-Methode: 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

Dank madhuri .... seine Arbeits – Siddharth

0

Ansicht Pager einige Seiten auf beiden Seiten, so dass behalten auf Seite Gleiten ohne Belastung zeigt. Die Offset-Grenze von ViewPager ist standardmäßig 0.

setOffscreenPageLimit (int limit): die Anzahl der Seiten festlegen, den beiden Seiten der aktuellen Seite in der Ansichtshierarchie in einem Ruhezustand gehalten werden soll.

Aber Einstellung viewpager.setOffscreenPageLimit (0) wird nicht funktionieren

Warnung: Requested offscreen page limit 0 too small; defaulting to 1 versuchen Benutzer diese So Benutzer diese

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