android无休止地从json url使用自定义适配器(文本、图像)滚动,而不是将第二页项目添加到列表视图

android无休止地从json url使用自定义适配器(文本、图像)滚动,而不是将第二页项目添加到列表视图,android,android-listview,scrollview,Android,Android Listview,Scrollview,有谁能告诉我如何使用自定义适配器(加载文本和图像)实现listview的无止境滚动。下面是我试过的代码,它加载了第一页,但没有加载第二页,检查了滚动触发事件,工作正常 注意:(在本例中,为了测试目的,我尝试再次加载相同的json数据) 非常感谢 MainActivity.java public class MainActivity extends Activity implements EndlessListener { TextView ver; TextView name; TextView

有谁能告诉我如何使用自定义适配器(加载文本和图像)实现listview的无止境滚动。下面是我试过的代码,它加载了第一页,但没有加载第二页,检查了滚动触发事件,工作正常

注意:(在本例中,为了测试目的,我尝试再次加载相同的json数据)

非常感谢

MainActivity.java

public class MainActivity extends Activity implements EndlessListener {
TextView ver;
TextView name;
TextView api;

EndlessAdapter oEndlessAdapter;
EndlessListView oEndlessListView;

//URL to get JSON Array
private static String url = "http://api.learn2crack.com/android/jsonos/";

//JSON Node Names 
private static final String TAG_OS = "android";
public static final String TAG_VER = "ver";
public static final String TAG_NAME = "name";
public static final String TAG_API = "api";

JSONArray android = null;
int iPageNo = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    oEndlessListView = (EndlessListView) findViewById(R.id.list);

    //EndlessAdapter adp = new EndlessAdapter(this, getDataFrmJson(iPageNo));
    //oEndlessListView.setLoadingView(R.layout.loading_layout);
    //oEndlessListView.setAdapter(adp);
    new JSONParse().execute();
}


private class JSONParse extends AsyncTask<String, String, ArrayList<HashMap<String, String>>> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
         ver = (TextView)findViewById(R.id.vers);
         name = (TextView)findViewById(R.id.name);
         api = (TextView)findViewById(R.id.api);
    }

    @Override
    protected ArrayList<HashMap<String, String>> doInBackground(String... args) {
        Log.i("KUMAR", "Calling doInBackground()");
        ArrayList<HashMap<String, String>> list = getDataFrmJson(iPageNo);
        return list;
    }
     @Override
     protected void onPostExecute(ArrayList<HashMap<String, String>> list) {
         try {
             int currentPosition = oEndlessListView.getFirstVisiblePosition(); 
             if( iPageNo == 1 ) {
                 oEndlessAdapter = new EndlessAdapter(MainActivity.this, list);
                 oEndlessListView.setLoadingView(R.layout.loading_layout);
                 oEndlessListView.setAdapter(oEndlessAdapter);
                 oEndlessListView.setListener(MainActivity.this);
                 iPageNo++;
             }else {
                oEndlessAdapter = new EndlessAdapter(MainActivity.this, list);
                oEndlessListView.setAdapter(oEndlessAdapter);
             }
            oEndlessListView.setSelectionFromTop(currentPosition + 1, 0);
        } catch (Exception e) {
            e.printStackTrace();
        }
     }
}

public ArrayList<HashMap<String, String>> getDataFrmJson(int page) {
    ArrayList<HashMap<String, String>> osList = new ArrayList<HashMap<String, String>>();
    try {

        JSONParser jParser = new JSONParser();
        JSONObject json = jParser.getJSONFromUrl(url);

        android = json.getJSONArray(TAG_OS);
        for (int i = 0; i < android.length(); i++) {
            JSONObject c = android.getJSONObject(i);

            // Storing JSON item in a Variable
            String ver = c.getString(TAG_VER);
            String name = c.getString(TAG_NAME);
            String api = c.getString(TAG_API);

            // Adding value HashMap key => value
            HashMap<String, String> map = new HashMap<String, String>();

            map.put(TAG_VER, ver);
            map.put(TAG_NAME, name);
            map.put(TAG_API, api);

            osList.add(map);
        }
    }catch(JSONException je) {
        je.printStackTrace();
    }
    return osList;
}

@Override
public void loadData() {
    new JSONParse().execute();
}
EndlessAdapter.java

    {public class EndlessAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;


    public EndlessAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //imageLoader=new ImageLoader(activity.getApplicationContext());
    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;

        if(convertView==null) {
            view = inflater.inflate(R.layout.list_v, null);
        }

        TextView title = (TextView)view.findViewById(R.id.vers); // title
        TextView artist = (TextView)view.findViewById(R.id.name); // artist name
        TextView duration = (TextView)view.findViewById(R.id.api); // duration
        ImageView thumb_image=(ImageView)view.findViewById(R.id.imageView1); // thumb image

        HashMap<String, String> version = new HashMap<String, String>();
        version = data.get(position);

        // Setting all values in listview
        title.setText(version.get(MainActivity.TAG_VER));
        artist.setText(version.get(MainActivity.TAG_NAME));
        duration.setText(version.get(MainActivity.TAG_API));
        UrlImageViewHelper.setUrlDrawable(thumb_image, "http://romio.com/assets/images/qa/noprofpicF480x480.png", R.drawable.loading);

        return view;
    }
}}
{公共类EndlessAdapter扩展BaseAdapter{
私人活动;
私有数组列表数据;
专用静态充气机=空;
公共EndlessAdapter(活动a,阵列列表d){
活动=a;
数据=d;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
//imageLoader=新的imageLoader(activity.getApplicationContext());
}
public int getCount(){
返回data.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
if(convertView==null){
视图=充气机。充气(R.layout.list_v,空);
}
TextView title=(TextView)view.findViewById(R.id.vers);//title
TextView艺术家=(TextView)view.findViewById(R.id.name);//艺术家名称
TextView duration=(TextView)view.findviewbyd(R.id.api);//duration
ImageView thumb_image=(ImageView)view.findViewById(R.id.imageView1);//thumb image
HashMap版本=新的HashMap();
版本=数据。获取(位置);
//在listview中设置所有值
title.setText(version.get(MainActivity.TAG_VER));
artist.setText(version.get(MainActivity.TAG_NAME));
duration.setText(version.get(MainActivity.TAG_API));
UrlImageViewHelper.setUrlDrawable(thumb_图像,“http://romio.com/assets/images/qa/noprofpicF480x480.png“,R.可牵引。装载);
返回视图;
}
}}
activity_main.xml

    {<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <com.example.androidhive.EndlessListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/getdata"
        android:divider="@android:color/transparent"
        android:dividerHeight="5dp" />

   <!--  <Button
        android:id="@+id/getdata"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="23dp"
        android:text="@string/bnt_load" /> -->

</RelativeLayout>}

list_v.xml 
    {<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:background="@drawable/border"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/vers"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="5dp"
        android:hint="@string/ph_version_no"
        android:textColor="@color/color_black"
        android:textSize="25sp" 
        android:textStyle="bold"
        android:layout_toRightOf="@+id/imageView1"
    />

    <TextView
        android:id="@+id/name"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:hint="@string/ph_version_name"
        android:textColor="@color/color_red"
        android:layout_toRightOf="@+id/imageView1"
        android:layout_below="@+id/vers"
        android:textSize="15sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/api"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="15dp"
        android:hint="@string/ph_version_api"
        android:textColor="@color/color_black"
        android:textSize="14sp"
        android:layout_toRightOf="@+id/imageView1"
        android:layout_below="@+id/name" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="60dp"
        android:layout_height="71dp"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/vers"
        android:contentDescription="@string/img_content_desc"
        android:src="@drawable/img_sample" />

</RelativeLayout>}
{
}
list_v.xml
{
}

b因为每次下载列表数据并用Arraylist中的旧数据替换新数据时。您应该将新的json数据添加到当前的arraylist中。短时间内制作
ArrayList列表
global并将所有新数据添加到此全局列表。

postExecute
方法中,使用新的iTen(且仅新的iTen)重新创建适配器,并在
iPageNo!=1
。在这种情况下,您应该将新的iTen添加到以前的适配器中,而不是替换以前的适配器。您找到解决方案了吗?
    {<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <com.example.androidhive.EndlessListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/getdata"
        android:divider="@android:color/transparent"
        android:dividerHeight="5dp" />

   <!--  <Button
        android:id="@+id/getdata"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="23dp"
        android:text="@string/bnt_load" /> -->

</RelativeLayout>}

list_v.xml 
    {<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:background="@drawable/border"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/vers"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="5dp"
        android:hint="@string/ph_version_no"
        android:textColor="@color/color_black"
        android:textSize="25sp" 
        android:textStyle="bold"
        android:layout_toRightOf="@+id/imageView1"
    />

    <TextView
        android:id="@+id/name"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:hint="@string/ph_version_name"
        android:textColor="@color/color_red"
        android:layout_toRightOf="@+id/imageView1"
        android:layout_below="@+id/vers"
        android:textSize="15sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/api"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="15dp"
        android:hint="@string/ph_version_api"
        android:textColor="@color/color_black"
        android:textSize="14sp"
        android:layout_toRightOf="@+id/imageView1"
        android:layout_below="@+id/name" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="60dp"
        android:layout_height="71dp"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/vers"
        android:contentDescription="@string/img_content_desc"
        android:src="@drawable/img_sample" />

</RelativeLayout>}