2016-05-26 30 views
0

我有一個標籤佈局不取的數據,每個選項卡包含從字符串響應獲取數據列表,只有當我切換到下一個我得到我的第一個片段的數據然後回到第一個頁面,但是當我的應用程序首次啓動時,我沒有收到數據。 我在切換標籤之後獲取數據。 請幫我一把。標籤片段上推出應用

這裏是我的代碼

package roastnow.volleyapp; 
import android.support.design.widget.TabLayout; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.animation.AlphaAnimation; 
import android.view.animation.Animation; 
import android.view.animation.LinearInterpolator; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity 
    { 

Toolbar toolbar; 
TabLayout tabLayout; 
ViewPager viewPager; 
ViewPagerAdapter viewPagerAdapter; 
TextView x; 

@Override 

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    toolbar = (Toolbar) findViewById(R.id.gh); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 
    x= (TextView) findViewById(R.id.tv); 
    tabLayout = (TabLayout) findViewById(R.id.tabLayout); 
    viewPager = (ViewPager) findViewById(R.id.viewPager); 
    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); 

    // now add all the fragments to this adapter 
    viewPagerAdapter.addFragments(new HomeFragment(), "Home"); 
    viewPagerAdapter.addFragments(new TopFreeFragment(), "Top Free"); 
    viewPagerAdapter.addFragments(new TopPaidFragment(), "Top Paid"); 
    viewPagerAdapter.addFragments(new SearchFragment(), "Search"); 
    viewPagerAdapter.addFragments(new AllFragment(), "All"); 
    //viewPager.setOffscreenPageLimit(4); 
    viewPager.setAdapter(viewPagerAdapter); 

    tabLayout.setupWithViewPager(viewPager); 
    //TabLayout.Tab tab = tabLayout.getTabAt(2); 
    //tab.select(); 
} 
} 

HomeFragment.java

package roastnow.volleyapp; 
import android.app.ListFragment; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.media.tv.TvInputService; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 
import android.widget.TextView; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.VolleyLog; 
import com.android.volley.toolbox.JsonArrayRequest; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import org.w3c.dom.Text; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import com.android.volley.Request.Method; 

/** 
    * A simple {@link Fragment} subclass. 
    */ 
public class HomeFragment extends Fragment { 

private static final String url="http://192.168.1.2/fetch.php"; 
private static final String TAG= MainActivity.class.getSimpleName(); 
private ProgressDialog pDialog; 
private List<Venue> venueList=new ArrayList<Venue>(); 
private ListView listView; 
private CustomListAdapter adapter; 
public final boolean isVisibleToUser=false; 
boolean _areLecturesLoaded = false; 
private View rootView = null; 
public HomeFragment() { 
    // Required empty public constructor 


} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    rootView= inflater.inflate(R.layout.fragment_home, container, false); 
    return rootView; 
} 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    //venueList.clear(); 

     //loadData(); 





    // Log.w("lists", venueList.toString()); 
    //pDialog = new ProgressDialog(getActivity()); 

    //Showing progress dialog before making httprequest 

    //pDialog.setMessage("Loading.."); 
    //pDialog.show(); 

    //creating volley request 
    // venueList.clear(); 



//Log.w("lists2", venueList.toString()); 


    StringRequest req = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 

      Log.d(TAG, response.toString()); 

      hidepDialog(); 
      try { 
       JSONObject jObj = new JSONObject(response); 
       JSONArray jsonArray = jObj.getJSONArray("server_response"); 
       //Parsing json 
       // JSONObject obj = response.getJSONObject(); 
       Log.w("js", jsonArray + ""); 
       for (int i = 0; i < jsonArray.length(); i++) { 

        JSONObject obj = jsonArray.getJSONObject(i); 

        Venue venue = new Venue(); 
        venue.setTitle(obj.getString("name")); 
        venue.setAddress(obj.getString("address")); 
        venue.setImageUrl(obj.getString("image")); 
        venue.setRating(((Number) obj.get("rating")).doubleValue()); 

        //adding the venue to venue array 
        venueList.add(venue); 
        Log.w("vl", venueList + ""); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      //Log.w("lists3", venueList.toString()); 
      //notify list adapter about the data change so that it rendersthe list view with updated data 
      //adapter.notifyDataSetChanged(); 



     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.d(TAG, "Error :" + error.getMessage()); 
      hidepDialog(); 

     } 
    } 
    ); 

    //Adding the request to request queue 
    AppController.getInstance().addToRequestQueue(req); 

    listView = (ListView) rootView.findViewById(R.id.list); 
    listView.setAdapter(adapter); 
    adapter = new CustomListAdapter(getActivity(), venueList); 
} 


@Override 
public void onDestroy() { 
    super.onDestroy(); 
    hidepDialog(); 
} 

private void hidepDialog(){ 
    if(pDialog!=null){ 
     pDialog.dismiss(); 
**strong text**  pDialog=null; 
    } 
    } 

} 

MyCustomListAdapter.java

package roastnow.volleyapp; 

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.NetworkImageView; 
import java.util.List; 
/** 
    * Created by LUCKY on 5/25/2016. 
    */ 
public class CustomListAdapter extends BaseAdapter { 

private Activity activity; 
private LayoutInflater inflater; 
private List<Venue> venueItems; 



public CustomListAdapter(Activity activity,List<Venue> venueItems){ 
    this.activity=activity; 
    this.venueItems=venueItems; 
} 


@Override 
public int getCount() { 
    return venueItems.size(); 
} 

@Override 
public Object getItem(int position) { 
    return venueItems.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if(inflater==null){ 
     inflater= (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 
    if(convertView== null){ 
     convertView=inflater.inflate(R.layout.list_row,parent,false); 
    } 
    ImageLoader imageLoader=AppController.getInstance().getImageLoader(); 
    if(imageLoader==null){ 
     imageLoader=AppController.getInstance().getImageLoader(); 
    } 
    NetworkImageView imageView= (NetworkImageView) convertView.findViewById(R.id.image); 
    TextView title=(TextView) convertView.findViewById(R.id.title); 
    TextView address= (TextView) convertView.findViewById(R.id.address); 
    TextView rating= (TextView) convertView.findViewById(R.id.rating); 

    //getting the data for the row 
    Venue v=venueItems.get(position); 

    //image 
    imageView.setImageUrl(v.getImageUrl(),imageLoader); 

    //title 
    title.setText(v.getTitle()); 

    //address 
    address.setText(v.getAddress()); 

    //rating 
    rating.setText(String.valueOf(v.getRating())); 


    return convertView; 
    } 
} 

回答

0

將數據添加到列表中進行後

adapter.notifyDataSetChanged(); 

因爲您的數據加載在安裝適配器後完成。您正在使用async請求。

也更好地利用是:

adapter = new CustomListAdapter(getActivity(), venueList);  
listView.setAdapter(adapter); 
+0

謝謝,我解決了這個問題。 –

+0

我需要1個更多的幫助..我已經添加了一些代碼,因爲我的片段一次又一次加載相同的數據。所以我只好串請求碼成一個函數loadData並添加這行代碼@Override 公共無效setUserVisibleHint(布爾isVisibleToUser){ super.setUserVisibleHint(isVisibleToUser);如果(isVisibleToUser &&!_areLecturesLoaded)loadData();如果(isVisibleToUser &&!_areLecturesLoaded){ _areLecturesLoaded = true; } }我將默認選項卡設置爲2當我去第一個選項卡,agin同樣的問題 –

+0

我設置選項卡在第二位置,這樣我可以先看到該選項卡,但是當我去第一個選項卡時,數據不顯示,當我再次切換的標籤,我如果選項卡上的用戶點擊,不初始化同時 –