Android Listview在第15行开始重复

时间:2014-10-05 17:32:35

标签: android json android-listview

我正在做一个项目,我从JSON填充Listview。

JSON iam传递工作完美,我的列表视图正确显示所有列表值但是当我点击10/12列表后的任何列表时出现问题,我得到的值从第一个开始重复。

不会检索相应的值。

我也就此问题对其他帖子进行了评审,但现在解决了我的问题。

以下是我的代码。我希望有人会找到解决方案。

package com.desitv.geojoy;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.widget.SearchView;
import com.desitv.geojoy.R;
import com.desitv.geojoy.adapter.LatestGridAdapter;
import com.desitv.geojoy.item.ItemLatest;
import com.desitv.geojoy.util.AlertDialogManager;
import com.desitv.geojoy.util.Constant;
import com.desitv.geojoy.util.JsonUtils;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;

public class LatestFragment extends SherlockFragment {



    ListView lsv_latest;
    List<ItemLatest> arrayOfLatestMusic;
    LatestGridAdapter objAdapter;
    AlertDialogManager alert = new AlertDialogManager();
    ArrayList<String> allListImageUrl,allListChannelCatName;
    ArrayList<String> allListChannelId,allListChannelCatId,allListChannelUrl,allListChannelName,allListChannelDesc;
    String[] allArrayImage,allArrayChannelCatName;
    String[] allArrayChannelId,allArrayChannelCatId,allArrayChannelurl,allArrayChannelName,allArrayChannelDesc;
    private ItemLatest objAllBean;
    private int columnWidth;
    JsonUtils util;
    int textlength = 0;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        View rootView = inflater.inflate(R.layout.fragment_latest, container, false);

        setHasOptionsMenu(true);

        lsv_latest=(ListView)rootView.findViewById(R.id.lsv_latest);
        arrayOfLatestMusic=new ArrayList<ItemLatest>();
        allListImageUrl=new ArrayList<String>();
        allListChannelCatName=new ArrayList<String>();
        allListChannelCatId=new ArrayList<String>();
        allListChannelId=new ArrayList<String>();
        allListChannelName=new ArrayList<String>();
        allListChannelUrl=new ArrayList<String>();
        allListChannelDesc=new ArrayList<String>();


        allArrayImage=new String[allListImageUrl.size()];
        allArrayChannelCatName=new String[allListChannelCatName.size()];
        allArrayChannelId=new String[allListChannelId.size()];
        allArrayChannelCatId=new String[allListChannelCatId.size()];
        allArrayChannelurl=new String[allListChannelUrl.size()];
        allArrayChannelName=new String[allListChannelName.size()];
        allArrayChannelDesc=new String[allListChannelDesc.size()];


        util=new JsonUtils(getActivity());


        if (JsonUtils.isNetworkAvailable(getActivity())) {
            new MyTask().execute(Constant.LATEST_URL);
        } else {
            showToast("No Network Connection!!!");
             alert.showAlertDialog(getActivity(), "Internet Connection Error",
                        "Please connect to working Internet connection", false);
        }


        lsv_latest.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long arg3) {
                // TODO Auto-generated method stub
                objAllBean=arrayOfLatestMusic.get(position);
                int pos=objAllBean.getId();

            Intent intplay=new Intent(getActivity(),TvDetails.class);
                intplay.putExtra("POSITION", pos);
                intplay.putExtra("CHANNEL_IMAGE", allArrayImage);
                intplay.putExtra("CHANNEL_CATNAME", allArrayChannelCatName);
                intplay.putExtra("CHANNEL_CATID", allArrayChannelCatId);
                intplay.putExtra("CHANNEL_URL", allArrayChannelurl);
                intplay.putExtra("CHANNEL_NAME", allArrayChannelName);
                intplay.putExtra("CHANNEL_CID", allArrayChannelId);
                intplay.putExtra("CHANNEL_DISCRIPTION", allArrayChannelDesc);


            startActivity(intplay);



            }
        });

        return rootView;
    }


    private class MyTask extends AsyncTask<String, Void, String> {

        ProgressDialog pDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            pDialog = new ProgressDialog(getActivity());
            pDialog.setMessage("Loading...");
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            return JsonUtils.getJSONString(params[0]);
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if (null != pDialog && pDialog.isShowing()) {
                pDialog.dismiss();
            }

            if (null == result || result.length() == 0) {
                showToast("Server Connection Error");
                alert.showAlertDialog(getActivity(), "Server Connection Error",
                        "May Server Under Maintaines Or Low Network", false);

            } else {

                try {
                    JSONObject mainJson = new JSONObject(result);
                    JSONArray jsonArray = mainJson.getJSONArray(Constant.LATEST_ARRAY_NAME);
                    JSONObject objJson = null;
                    for (int i = 0; i < jsonArray.length(); i++) {
                          objJson = jsonArray.getJSONObject(i);

                        ItemLatest objItem = new ItemLatest();

                        objItem.setId(objJson.getInt(Constant.CHANNEL_ID));
                        objItem.setCategoryId(objJson.getInt(Constant.CHANNEL_CATID));
                        objItem.setCategoryName(objJson.getString(Constant.CHANNEL_CAT_NAME));
                        objItem.setChannelName(objJson.getString(Constant.LATEST_CHANNEL_NAME));
                        objItem.setChannelUrl(objJson.getString(Constant.lATETST_CHANNEL_URL));
                        objItem.setDescription(objJson.getString(Constant.LATEST_CHANNEL_DESCRIPTION));
                        objItem.setImage(objJson.getString(Constant.LATEST_CHANNEL_IMAGE));

                        arrayOfLatestMusic.add(objItem);


                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
                for(int j=0;j<arrayOfLatestMusic.size();j++)
                {

                    objAllBean=arrayOfLatestMusic.get(j);

                    allListImageUrl.add(objAllBean.getImage());
                    allArrayImage=allListImageUrl.toArray(allArrayImage);

                    allListChannelCatName.add(objAllBean.getCategoryName());
                    allArrayChannelCatName=allListChannelCatName.toArray(allArrayChannelCatName);

                    allListChannelId.add(String.valueOf(objAllBean.getId()));
                    allArrayChannelId=allListChannelId.toArray(allArrayChannelId);

                    allListChannelCatId.add(String.valueOf(objAllBean.getCategoryId()));
                    allArrayChannelCatId=allListChannelCatId.toArray(allArrayChannelCatId);


                    allListChannelUrl.add(String.valueOf(objAllBean.getChannelUrl()));
                    allArrayChannelurl=allListChannelUrl.toArray(allArrayChannelurl);

                    allListChannelName.add(String.valueOf(objAllBean.getChannelName()));
                    allArrayChannelName=allListChannelName.toArray(allArrayChannelName);



                    allListChannelDesc.add(objAllBean.getDescription());
                    allArrayChannelDesc=allListChannelDesc.toArray(allArrayChannelDesc);


                }

            setAdapterToListview();
        }

        }
    }



    public void setAdapterToListview() {
        objAdapter = new LatestGridAdapter(getActivity(), R.layout.latest_lsv_item,
                arrayOfLatestMusic,columnWidth);
        lsv_latest.setAdapter(objAdapter);
    }

    public void showToast(String msg) {
        Toast.makeText(getActivity(), msg, Toast.LENGTH_LONG).show();
    }

    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.menu_search, menu);

        final SearchView searchView = (SearchView) menu.findItem(R.id.search)
                .getActionView();

        final MenuItem searchMenuItem = menu.findItem(R.id.search);
        searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                // TODO Auto-generated method stub
                if(!hasFocus) {
                     searchMenuItem.collapseActionView();
                    searchView.setQuery("", false);
                }
            }
        });


        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextChange(String newText) {

                textlength=newText.length();
                arrayOfLatestMusic.clear();

                for(int i=0;i< allArrayChannelName.length;i++)
                {
                    if(textlength <= allArrayChannelName[i].length())
                    {
                        if(newText.toString().equalsIgnoreCase((String) allArrayChannelName[i].subSequence(0, textlength)))
                        {


                            ItemLatest objItem = new ItemLatest();

                            objItem.setId(Integer.parseInt(allArrayChannelId[i]));
                            objItem.setCategoryId(Integer.parseInt(allArrayChannelCatId[i]));
                            objItem.setCategoryName(allArrayChannelCatName[i]);
                            objItem.setDescription(allArrayChannelDesc[i]);
                            objItem.setImage(allArrayImage[i]);
                            objItem.setChannelName(allArrayChannelName[i]);
                            objItem.setChannelUrl(allArrayChannelurl[i]);


                            arrayOfLatestMusic.add(objItem);

                        }
                    }
                }

                setAdapterToListview();
                return false;
            }

            @Override
            public boolean onQueryTextSubmit(String query) {
                // Do something
                return true;
            }
        });

    }
}

LatestGridAdapter代码

package com.desitv.geojoy.adapter;

import java.util.List;

import com.desitv.geojoy.R;
import com.desitv.geojoy.imageloader.ImageLoader;
import com.desitv.geojoy.item.ItemLatest;
import com.desitv.geojoy.util.Constant;

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

public class LatestGridAdapter extends ArrayAdapter<ItemLatest>{


    private Activity activity;
    private List<ItemLatest> itemsLatest;
    private ItemLatest objLatestBean;
    private int row;
    public ImageLoader imageLoader; 

     public LatestGridAdapter(Activity act, int resource, List<ItemLatest> arrayList, int columnWidth) {
            super(act, resource, arrayList);
            this.activity = act;
            this.row = resource;
            this.itemsLatest = arrayList;
            imageLoader=new ImageLoader(activity);


        }

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

                holder = new ViewHolder();
                view.setTag(holder);
            } else {
                holder = (ViewHolder) view.getTag();
            }

            if ((itemsLatest == null) || ((position + 1) > itemsLatest.size()))
                return view;

            objLatestBean = itemsLatest.get(position);


             holder.imgv_latetst=(ImageView)view.findViewById(R.id.picture);
             holder.name=(TextView)view.findViewById(R.id.text);
             holder.txt_category=(TextView)view.findViewById(R.id.text_category);

             imageLoader.DisplayImage(Constant.SERVER_IMAGE_UPFOLDER_THUMB+objLatestBean.getImage().toString(), holder.imgv_latetst);
             holder.name.setText(objLatestBean.getChannelName().toString());
             holder.txt_category.setText(objLatestBean.getCategoryName().toString());


            return view;

        }

        public class ViewHolder {

            public ImageView imgv_latetst;
            public  TextView name,txt_category;

        }

}

0 个答案:

没有答案