Android ObserveableScrollView加载更多(加载问题)

时间:2013-04-12 10:41:40

标签: android scrollview progressdialog

我以JSON格式从网站获取信息,并使用AsynTask将该信息显示到我的应用程序中。问题是在On上第一次我的进度对话框显示良好并在将内容加载到应用程序后隐藏。但是当我使用Scroll-view加载更多时,会出现进度对话框,并在加载后立即隐藏,同时进度对话框再次打开而不隐藏,Scroll-View在后台再次加载数据。我只想加载一次每次使用Scroll-View加载更多数据后的数据。进度对话框没有隐藏,它一直在运行我的应用程序。我很震惊。

基本上我注意到,由于此滚动视图触发器两次,我的Scroll-View指示器在底部发生碰撞两次。如何在每次滚动后停止并限制一次。

另外还有一件事要分享一下,Froyo 2.2中的一切都很棒,而不是2.3到4.2。请帮助我。提前谢谢。

以下是我的代码。

package com.example.lmf;

import java.net.URLEncoder;
import org.json.JSONArray;
import org.json.JSONObject;

import com.example.lmf.ObservableScrollView.ScrollViewListener;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.Toast;

public class searchClassified extends Activity implements ScrollViewListener
{

    ObservableScrollView scrollView;
    ProgressDialog _progressDialog;
    int page_no = 1;
    String k = "";
    final static String URL = "http://www.lmf.com.pk/admin/json.php?YOUR URL OF JSON";
    final getInternetData obj = new getInternetData();
    public ImageLoader imageLoader = null;
    Context context = this;


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.get_classified);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        scrollView = (ObservableScrollView) findViewById(R.id.my_scroll);
        scrollView.setScrollViewListener(this);
        imageLoader = new ImageLoader(this);
        String s = getIntent().getExtras().getString("query")!= "" ? getIntent().getExtras().getString("query") : "";
        EditText et = (EditText) findViewById(R.id.query);
        et.setText(s);
        k = "all="+URLEncoder.encode(s);
        //showProgress(context);
        new getBackgroundData().execute();

    }



    public void onScrollEnded(ObservableScrollView scrollView, int x, int y,
            int oldx, int oldy) {
        // TODO Auto-generated method stub
        page_no = page_no + 1;
        k = k+"&page_no="+page_no;
        //showProgress(context);
        getBackgroundData d1 =  new getBackgroundData();
        d1.execute();
        if(d1.getStatus()==AsyncTask.Status.FINISHED) {
            d1 = null;
            _progressDialog.dismiss();

        }

    }


    public void searchAds(View v)
    {

        EditText query = (EditText) findViewById(R.id.query);
        String q = query.getText().toString();
        if(q == "" || q == "search")
        {
            Dialog d = new Dialog(this);
            d.setTitle("Enter Valid Search Parameter");
            d.show();
        }
        else
        {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
            Intent i = new Intent(searchClassified.this,com.example.lmf.searchClassified.class);
            i.putExtra("query", ""+q+"");
            startActivity(i);

        }

    }

    public void showProgress(Context c)
    {
         _progressDialog = ProgressDialog.show(
                    c,
                    "Please wait",
                    "Performing task..."
                );

    }

    public void hideProgress()
    {
        _progressDialog.dismiss();
    }



    //////////// Async Class

    private class getBackgroundData extends AsyncTask<Void, Integer, JSONArray>
    {

        protected void onPreExecute() 
        {
            _progressDialog = new ProgressDialog(context);
            _progressDialog.setMessage("Loading...");
            _progressDialog.show();
        }

        @Override
        protected JSONArray doInBackground(Void... params) 
        {
            try
            {
                JSONArray array = obj.getDATA(k,URL);
                return array;

            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
                return null;
        }


        @Override
        protected void onPostExecute(JSONArray array) 
        {
            LinearLayout sv = (LinearLayout) findViewById(R.id.data);
            try
            {

            for (int i = 0; i <array.length(); i++) {


                JSONObject row = array.getJSONObject(i);

                //// TextView Creation start here /////////

                TextView tv = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
                tv.setText(row.getString("post_title"));
                tv.setTextColor(Color.BLACK);
                tv.setTextSize(14);
                tv.setPadding(8, 6, 0, 12);
                tv.setFocusable(true);
                tv.setLayoutParams(new LayoutParams(
                        LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT));

                //// TextView Creating Ends here /////////



                //// Horizontal Line Creating here /////////
                View v = new View(searchClassified.this);
                LinearLayout.LayoutParams viewLp = new LayoutParams(LayoutParams.MATCH_PARENT, 1);
                viewLp.setMargins(0, 4, 0, 4);

                v.setLayoutParams(viewLp);
                v.setBackgroundColor(Color.LTGRAY);

                //// Horizontal Line Creating Ends here /////////


                //// Image Creating Starts from  here /////////

                LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

                lp.setMargins(3, 0, 15, 8);

                lp.width = 70;
                lp.height = 80;
                ImageView imageView = new ImageView(searchClassified.this);
                String[] parts = row.getString("post_img").split("/");
                int last_index = parts.length - 1;
                String image_name = "thumb_"+parts[last_index];
                String str = "";
                for(int j=0; j<last_index; j++)
                {
                    str += parts[j]+"/";
                }
                String path = "http://www.lmf.com.pk/"+str+image_name;


                imageLoader.DisplayImage(path, imageView);

                //// Image Creating Ends here /////////



                // Creating LinearLAyout /////////

                LinearLayout l1 = new LinearLayout(searchClassified.this);

                l1.setOrientation(LinearLayout.HORIZONTAL);
                l1.setHapticFeedbackEnabled(true);
                l1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                l1.setId(obj.convertStrtoInt(row.getString("post_id")));
                l1.setHapticFeedbackEnabled(true);
                l1.setOnClickListener(new OnClickListener() {

                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        Intent i = new Intent(searchClassified.this,com.example.lmf.adsDetail.class);
                        i.putExtra("id", v.getId());
                        startActivity(i);
                    }
                });

                l1.addView(imageView, lp);
                l1.addView(tv);
                sv.addView(l1);
                sv.addView(v);



            }

            _progressDialog.hide();
            _progressDialog.dismiss();
            _progressDialog = null;
            }
            catch(Exception e)
            {
                e.printStackTrace();

            }

        }



    }



    /////////// Ends Here 

    public boolean onCreateOptionsMenu(Menu menu) 
    {
        MenuItem item = menu.add ("Quit");
        item.setOnMenuItemClickListener (new OnMenuItemClickListener()
        {
            public boolean onMenuItemClick (MenuItem item)
            {
                //clearArray();
                finish();
                return true;
            }
        });
                return true;
    }


}

1 个答案:

答案 0 :(得分:0)

我已解决此问题,并希望与未来的读者分享。我做了一个开关并添加了案例,现在新的Scroll-View触发器无法运行,直到之前的数据无法完成加载。

这是最终的代码,希望能帮到你的朋友。感谢

package com.example.lmf;

import java.net.URLEncoder;
import org.json.JSONArray;
import org.json.JSONObject;

import com.example.lmf.ObservableScrollView.ScrollViewListener;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.Toast;

public class searchClassified extends Activity implements ScrollViewListener
{

    ObservableScrollView scrollView;
    ProgressDialog _progressDialog;
    int page_no = 1;
    String k = "";
    final static String URL = "Your URL HERE For Getting JSON";
    final getInternetData obj = new getInternetData();
    public ImageLoader imageLoader = null;
    Context context = this;
    int num = 1;
    private static final int SPLASH_DURATION = 3000; // 3 seconds


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.get_classified);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        scrollView = (ObservableScrollView) findViewById(R.id.my_scroll);
        scrollView.setScrollViewListener(this);
        imageLoader = new ImageLoader(this);
        String s = getIntent().getExtras().getString("query")!= "" ? getIntent().getExtras().getString("query") : "";
        EditText et = (EditText) findViewById(R.id.query);
        et.setText(s);
        k = "all="+URLEncoder.encode(s);
        showProgress();
        new getBackgroundData().execute();

    }



    public void onScrollEnded(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) 
    {
        // TODO Auto-generated method stub
        page_no = page_no + 1;
        k = k+"&page_no="+page_no;
        switch(num)
        {
        case 1:
            showProgress();
            new getBackgroundData().execute();
            num = 0;
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {

                public void run() {
                     num = 1; 
                }

            }, SPLASH_DURATION);
            break;

        case 0:
            num = 0;
            break;
        }


    }


    public void searchAds(View v)
    {

        EditText query = (EditText) findViewById(R.id.query);
        String q = query.getText().toString();
        if(q == "" || q == "search")
        {
            Dialog d = new Dialog(this);
            d.setTitle("Enter Valid Search Parameter");
            d.show();
        }
        else
        {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
            Intent i = new Intent(searchClassified.this,com.example.lmf.searchClassified.class);
            i.putExtra("query", ""+q+"");
            startActivity(i);

        }

    }

    public void showProgress()
    {
        _progressDialog = new ProgressDialog(context);
        _progressDialog.setMessage("Loading...");
        _progressDialog.show();

    }

    public void hideProgress()
    {
        _progressDialog.dismiss();
    }



    //////////// Async Class

    private class getBackgroundData extends AsyncTask<Void, Integer, JSONArray>
    {

        @Override
        protected JSONArray doInBackground(Void... params) 
        {
            try
            {
                JSONArray array = obj.getDATA(k,URL);
                return array;

            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
                return null;
        }


        @Override
        protected void onPostExecute(JSONArray array) 
        {
            LinearLayout sv = (LinearLayout) findViewById(R.id.data);
            try
            {

            for (int i = 0; i <array.length(); i++) {


                JSONObject row = array.getJSONObject(i);

                //// TextView Creation start here /////////

                TextView tv = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
                tv.setText(row.getString("post_title"));
                tv.setTextColor(Color.BLACK);
                tv.setTextSize(14);
                tv.setPadding(8, 6, 0, 12);
                tv.setWidth(350);
                tv.setHeight(100);
                tv.setFocusable(true);
                LinearLayout.LayoutParams tvPar = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                //tvPar.weight = 2;
                tv.setLayoutParams(tvPar);

                //// TextView Creating Ends here /////////



                //// Horizontal Line Creating here /////////
                View v = new View(searchClassified.this);
                LinearLayout.LayoutParams viewLp = new LayoutParams(LayoutParams.MATCH_PARENT, 1);
                viewLp.setMargins(0, 4, 0, 4);

                v.setLayoutParams(viewLp);
                v.setBackgroundColor(Color.LTGRAY);

                //// Horizontal Line Creating Ends here /////////

                //// More Detail Icon Ends /////////////////////

                ImageView more_info_icon = new ImageView(searchClassified.this);
                //setting image resource
                more_info_icon.setImageResource(R.drawable.arrow);
                //setting image position
                LinearLayout.LayoutParams par = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                    //par.weight = 1;
                more_info_icon.setLayoutParams(par);
                more_info_icon.getLayoutParams().height = 30;
                more_info_icon.getLayoutParams().width = 30;
                more_info_icon.setPadding(0, 14, 0, 0);




                /// More Detail Icon Ends Here /////////////////////


                //// Image Creating Starts from  here /////////
                LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,4);
                lp.weight = 1;
                lp.setMargins(3, 0, 15, 8);

                lp.width = 70;
                lp.height = 80;
                ImageView imageView = new ImageView(searchClassified.this);
                String[] parts = row.getString("post_img").split("/");
                int last_index = parts.length - 1;
                String image_name = "thumb_"+parts[last_index];
                String str = "";
                for(int j=0; j<last_index; j++)
                {
                    str += parts[j]+"/";
                }
                String path = "http://www.lmf.com.pk/"+str+image_name;


                imageLoader.DisplayImage(path, imageView);

                //// Image Creating Ends here /////////



                // Creating LinearLAyout /////////

                final LinearLayout l1 = new LinearLayout(searchClassified.this);

                l1.setOrientation(LinearLayout.HORIZONTAL);
                l1.setHapticFeedbackEnabled(true);
                LinearLayout.LayoutParams LParam = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                LParam.weight = 4;
                l1.setLayoutParams(LParam);
                l1.setId(obj.convertStrtoInt(row.getString("post_id")));
                l1.setHapticFeedbackEnabled(true);
                l1.setOnClickListener(new OnClickListener() {

                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        l1.setBackgroundColor(Color.GREEN);
                        //l1.setBackgroundColor(Color.WHITE);
                        Intent i = new Intent(searchClassified.this,com.example.lmf.adsDetail.class);
                        i.putExtra("id", v.getId());
                        startActivity(i);
                    }
                });

                l1.addView(imageView, lp);
                l1.addView(tv);
                l1.addView(more_info_icon);
                sv.addView(l1);
                sv.addView(v);



            }
                hideProgress();

            }
            catch(Exception e)
            {
                e.printStackTrace();

            }

        }



    }



    /////////// Ends Here 

    public boolean onCreateOptionsMenu(Menu menu) 
    {
        MenuItem item = menu.add ("Quit");
        item.setOnMenuItemClickListener (new OnMenuItemClickListener()
        {
            public boolean onMenuItemClick (MenuItem item)
            {
                //clearArray();
                finish();
                return true;
            }
        });
                return true;
    }


}