Java 当滚动条到达末尾时,Gridview将从开始刷新
在gridview中加载数据时会发生这种情况。这是我的片段,包含gridview上的滚动侦听器。但每当我重新加载数据时,整个gridview都会重新加载并从顶部开始滚动,而不是从加载数据的位置开始。我使用的是单网格视图Java 当滚动条到达末尾时,Gridview将从开始刷新,java,android,json,eclipse,Java,Android,Json,Eclipse,在gridview中加载数据时会发生这种情况。这是我的片段,包含gridview上的滚动侦听器。但每当我重新加载数据时,整个gridview都会重新加载并从顶部开始滚动,而不是从加载数据的位置开始。我使用的是单网格视图 public class Women_Ethnic_Fragment extends Fragment { private static String url = "http://------/-------"; private in
public class Women_Ethnic_Fragment extends Fragment {
private static String url = "http://------/-------";
private int mVisibleThreshold = 5;
private int mCurrentPage = 0;
private int mPreviousTotal = 0;
private boolean mLoading = true;
private boolean mLastPage = false;
public Women_Ethnic_Fragment() {
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(
R.layout.gridview_fragment, container,
false);
setRetainInstance(true);
arrayList = new ArrayList<Items>();
gridView = (GridView) rootView.findViewById(R.id.gridView1);
new LoadData().execute(url);
//scrolling portion
gridView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view,
int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (mLoading) {
if (totalItemCount > mPreviousTotal) {
mLoading = false;
mPreviousTotal = totalItemCount;
mCurrentPage++;
if (mCurrentPage + 1 > 50) {
mLastPage = true;
}
}
}
if (!mLastPage
&& !mLoading
&& (totalItemCount - visibleItemCount) <= (firstVisibleItem + mVisibleThreshold)) {
//new asynctask called
new LoadData()
.execute("http://-------/---------");
mLoading = true;
}
}
@Override
public void onScrollStateChanged(AbsListView view,
int scrollState) {
}
});
return rootView;
}
//my asynctask
private class LoadData extends AsyncTask<String,
Void, Void> {
@Override
protected void onPostExecute(Void result) {
tp.dismiss();
adap = new Grid_View_Adatper(getActivity().getApplicationContext(),
arrayList);
gridView.setAdapter(adap);
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
tp = new TransparentProgressDialog(getActivity(),
R.drawable.spinner);
tp.setCancelable(false);
tp.setCanceledOnTouchOutside(false);
tp.show();
super.onPreExecute();
}
@Override
protected Void doInBackground(String... urls) {
try {
HttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(urls[0]);
HttpResponse response = client.execute(httpget);
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONArray json = new JSONArray(data);
for (int i = 0; i < json.length(); i++) {
JSONObject e = json.getJSONObject(i);
String name = e.getString("name");
String price = e.getString("price");
String image = e.getString("image");
String code = e.getString("sku");
tems = new Items(name, price, image, code);
arrayList.add(tems);
}
} catch (JSONException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
} catch (IOException e) {
} catch (RuntimeException e) {
}
return null;
}
}
Please help someone.
Thanks in advane.
public class Women\u族裔\u片段扩展片段{
专用静态字符串url=”http://------/-------";
私有int MVisibleThrreshold=5;
private int mCurrentPage=0;
private int mPreviousTotal=0;
私有布尔值mLoading=true;
私有布尔值mLastPage=false;
公共妇女(种族)片段(){
}
@凌驾
创建视图上的公共视图(更平坦的充气机,
视图组容器,
Bundle savedInstanceState){
视图根视图=充气机。充气(
R.layout.gridview_片段,容器,
假);
setRetainInstance(真);
arrayList=新的arrayList();
gridView=(gridView)rootView.findViewById(R.id.gridView1);
new LoadData().execute(url);
//滚动部分
setOnScrollListener(新的OnScrollListener(){
@凌驾
public void onScroll(AbsListView视图,
int firstVisibleItem,
int visibleItemCount,int totalItemCount){
如果(最大负载){
如果(totalItemCount>MPPreviousTotal){
mLoading=假;
MPPreviousTotal=totalItemCount;
mCurrentPage++;
如果(mCurrentPage+1>50){
mLastPage=true;
}
}
}
如果(!mLastPage
&&!mLoading
&&(totalItemCount-VisibleTimeCount)问题在于您反复实例化适配器。相反,请先检查适配器,如果它不为null,然后设置数据,然后通知数据集更改
if (adapter == null) {
adapter = new GridViewAdapter...
gridView.setAdapter(adapter)
}
// list refers the list inside in your adapter
list.addAll(newList); // or do your implementation
adapter.notifyDataSetChanged();
很高兴,如果你能为可能有同样问题的人接受答案,那就太好了。你能帮我在抽屉布局中实现多个可扩展的listview吗。??