Aggiorna la Griglia di Visualizzazione Dyanmically in Android

Ho un problema che sto mostrando immagini nella visualizzazione a griglia che viene analizzato da Url, ho progettato una affinare la finestra di dialogo di ricerca per affinare la ricerca in vista griglia, ma il problema è che l’analisi funziona bene, ma vista Griglia non rinfrescato la prossima volta quando l’ho elaborata Affinare la Ricerca. Significa che gli elementi della Vista Griglia non aggiornati mostra il risultato precedente. Si prega di aiutarmi per questo Problema.

Codice:

package org.shopzilla.android.search;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.shopzilla.android.common.R;
import org.shopzilla.android.parsing.SearchResult_Json;
import org.shopzilla.android.parsing.Search_Refine_Json;
import org.shopzilla.android.parsing.Search_refine_grid;
import org.shopzilla.android.product.ProductComparisonActivity;

import com.flurry.android.FlurryAgent;


import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class SearchGridActivity extends Activity{

    URL url1;
    public static Bitmap[] bmp;
    Bundle bundle;
    GridView grid;
    String prod_id;
    public static String str,str1;
    public static Boolean flag_grid=false;
    public static int count =0;
    ImageButton _gridImageButton, brand_options_btn,color_options_btn,mat_options_btn;
    Button categories_btn;
    public static String keyword;
     ArrayList<HashMap<String,Object>> list ;
    ListView listView,brandlist, colorlist;
    static final int DIALOG_PRODUCE_ID = 0,DIALOG_REFINE_ID=1;
    Dialog dialog_category,dialog_refine;
    public static ArrayList<String> brand_list_load = new ArrayList<String>();
    public static ArrayList<String> store_list_load = new ArrayList<String>();
    public static ArrayList<String> brand_count = new ArrayList<String>();
    public static ArrayList<String> brand_id = new ArrayList<String>();
    public static ArrayList<String> brand_array_list = new ArrayList<String>();
    public static ArrayList<String> store_array_list = new ArrayList<String>();
    public static ArrayList<String> store_count = new ArrayList<String>();
    public static ArrayList<String> store_id = new ArrayList<String>();
    public static ArrayList<String> brand_selected = new ArrayList<String>();
    public static ArrayList<HashMap<String,Object>> arr_list = new ArrayList<HashMap<String,Object>>();
    String final_keyword;
    public static Boolean falg=false;
    String store_name;
    String brand_name;
    public String temp;
    public static Boolean checkflag=true;
    EditText et_search;
    ArrayList<String> store_selected = new ArrayList<String>();
    ArrayAdapter<String> slected_brand;
    ArrayAdapter<String> slected_store;
    ListView brand_list,store_list;
    ArrayAdapter<String> arrayAdapter,storeAdapter, store_new_adapter, brand_new_adapter;
    SimpleAdapter adapter;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.searchgrid);
        bundle = getIntent().getExtras();
        if(count==0)
        {
        keyword = bundle.getString("keyword");
        final_keyword = keyword;
        }
        //str1 = bundle.getString("temp");

        grid = (GridView)findViewById(R.id.Search_Result_Grid);
        grid.invalidateViews();

        this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

        final ProgressDialog dialog = ProgressDialog.show(this, "BIZRATE", "Loading.......", true);
                final Handler handler = new Handler() {

                   public void handleMessage(Message msg) {

                        callHereForEff();
                       dialog.dismiss();

                      }
                   };
                   Thread checkUpdate = new Thread() {  
                    public void run() {
                      if(count==1)
                      {

                          SearchResult_Json.json_parsing(final_keyword);
                      }
                        //SearchResultActivity.set_image();
                        Search_refine_grid.Json_parsing();
                        handler.sendEmptyMessage(0);

                      }
                   };
                checkUpdate.start();




        EditText et_search_grid = (EditText)findViewById(R.id.txt_search_grid);
        et_search_grid.setText(keyword);

        et_search_grid.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                //TODO Auto-generated method stub
            Intent intent = new Intent(SearchGridActivity.this,SearchTabActivity.class);
            startActivity(intent);
            }
        });


        Button btn_list = (Button)findViewById(R.id.btn_searchresult_list);
        Button btn_refine = (Button)findViewById(R.id.btn_RefineSearch);

        btn_refine.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                //TODO Auto-generated method stub
                 arrayAdapter =      
                   new ArrayAdapter<String>(SearchGridActivity.this,R.layout.ref_row, R.id.label, brand_list_load);


                 storeAdapter =      
                       new ArrayAdapter<String>(SearchGridActivity.this,R.layout.ref_row, R.id.label, store_list_load);
                showDialog(0);
            }
        });

        btn_list.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                //TODO Auto-generated method stub
            Intent intent = new Intent(SearchGridActivity.this,SearchResultActivity.class);
            intent.putExtra("keyword", keyword);
            startActivity(intent);
                finish();
            }
        });

        /*for(int j=0;j<SearchResultActivity.image_me.size();j++)
        {
            ImageView iv = new ImageView(this);
            //iv.setImageBitmap(SearchResultActivity.me_bmp[j]);
        HashMap<String,Object> temp = new HashMap<String,Object>();
        temp.put("image",iv.VISIBLE);
        temp.put("price", SearchResultActivity.min_price.get(j));
        arr_list.add(temp);
        }

        adapter = new SimpleAdapter(SearchGridActivity.this,arr_list,R.layout.search_result_griditem,new String[] {"image","price"},new int[] {R.id.img_SearchResultGrid_Product,R.id.txt_SearchResultGrid_Price});


        grid.setAdapter(adapter);*/
        grid.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Toast.makeText(SearchGridActivity.this, "" + position, Toast.LENGTH_SHORT).show();
                if(SearchResultActivity.type.get(position).equals("OFFER"))
                {

                    prod_id = SearchResultActivity.id.get(position);
                    System.out.println("Offer Id==================="+prod_id);
                    //type_po=true;
                Intent intent = new Intent(SearchGridActivity.this,ProductComparisonActivity.class);
                intent.putExtra("prod_type", "true");
                intent.putExtra("prod_id", SearchResultActivity.id.get(position));
                startActivity(intent);
                }
                else
                {

                    prod_id = SearchResultActivity.id.get(position);
                    System.out.println("Product Id==================="+prod_id);
                    //type_po=false;
                    Intent intent = new Intent(SearchGridActivity.this,ProductComparisonActivity.class);
                    //intent.putExtra("productType", "SZPID");
                    intent.putExtra("prod_type", "false");

                    intent.putExtra("prod_id", SearchResultActivity.id.get(position));
                    startActivity(intent);
                }
            }
        });


    }

    //Clear Arraylists
    public static void arralist_clear()
    {
        SearchResultActivity.min_price.clear();
        SearchResultActivity.image_me.clear();
    }

    protected void callHereForEff() {
        if(count==1)
        {
            //ImageAdapter obj1 = new ImageAdapter(this);
            //obj1.notifyDataSetChanged();

            grid.setAdapter(new ImageAdapter(this));
             final ImageAdapter im = new ImageAdapter(this);
             im.notifyDataSetChanged();
        }
        else
        {
        //ImageAdapter obj = new ImageAdapter(this);
        //obj.notifyDataSetChanged();

        grid.setAdapter(new ImageAdapter(this));//Load the GridView
        final ImageAdapter im = new ImageAdapter(this);
        im.notifyDataSetChanged();
        }
        //grid.setAdapter(adapter);
    }


    //Showing Images with TextViews in Grid View
     public class ImageAdapter extends BaseAdapter{
            Context mContext;
            public static final int ACTIVITY_CREATE = 10;
            public ImageAdapter(Context c){
                mContext = c;
            }
            public int getCount() {
                //TODO Auto-generated method stub
                return SearchResultActivity.image_me.size();
            }

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

                if(convertView==null){
                    LayoutInflater li = getLayoutInflater();
                    v = li.inflate(R.layout.search_result_griditem, null);
                    TextView tv = (TextView)v.findViewById(R.id.txt_SearchResultGrid_Price);
                    tv.setText(SearchResultActivity.min_price.get(position));
                    ImageView iv = (ImageView)v.findViewById(R.id.img_SearchResultGrid_Product);
                    iv.setImageBitmap(SearchResultActivity.me_bmp[position]);

                }
                else
                {
                    v = convertView;
                }
                return v;
            }

            public Object getItem(int arg0) {
                //TODO Auto-generated method stub
                return null;
            }

            public long getItemId(int arg0) {
                //TODO Auto-generated method stub
                return 0;
            }
        }

    //Dialog Creation for Refine Search.
        @Override
        protected Dialog onCreateDialog(int id) {
            brand_list_load.add(brand_array_list.get(0));
            store_list_load.add(store_array_list.get(0));
            store_new_adapter = new ArrayAdapter<String>(this,R.layout.ref_row, R.id.label, store_array_list);
            brand_new_adapter = new ArrayAdapter<String>(this,R.layout.ref_row, R.id.label, brand_array_list);
            switch(id) {
            case 0:
                dialog_refine = new Dialog(this);
                dialog_refine.setContentView(R.layout.refine_dialog);
                brand_list= (ListView)dialog_refine.findViewById(R.id.exp);

                store_list= (ListView)dialog_refine.findViewById(R.id.exp_mat);
                brand_list.invalidate();
                store_list.invalidate();
                 brand_options_btn = (ImageButton)dialog_refine.findViewById(R.id.options_btn1);
                 et_search = (EditText)dialog_refine.findViewById(R.id.txt_RefineSearch);
                et_search.setText(keyword);
                mat_options_btn = (ImageButton)dialog_refine.findViewById(R.id.options_btn3);

                //Loads Brands List
                brand_list.setAdapter(arrayAdapter);
                //Loads Color List

                //Loads Material List
                store_list.setAdapter(storeAdapter);

             //Reset Button

                //Click on any Brand
                brand_list.setOnItemClickListener(new OnItemClickListener()
                {
                    public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3)
                    {

                            String brand = (String) (brand_list.getAdapter()).getItem(arg2); 
                            brand_name = "+"+brand;
                            temp = (String) (brand_list.getAdapter()).getItem(0);
                            brand_selected.clear();
                            brand_selected.add(brand);
                            //brand_list_load.clear();


                                arrayAdapter.clear();
                                brand_list.invalidate();
                                reload_list();


                            //arrayAdapter.add(brand);
                            //slected_brand = new ArrayAdapter<String>(this,R.layout.ref_row, R.id.label, brand_selected);
                            System.out.println("POSITION IS-->"+ brand);

                    }
                    });


                //Click on any Store
                store_list.setOnItemClickListener(new OnItemClickListener()
                {
                    public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3)
                    {

                            String store = (String) (store_list.getAdapter()).getItem(arg2); 
                            store_name = "+"+store;
                            store_selected.clear();
                            store_selected.add(store);

                            //storeAdapter.add(store);

                                storeAdapter.clear();
                                store_list.invalidate();
                                reload_storelist();




                        System.out.println("POSITION IS-->"+ store);

                    }
                    });

            //Brand options

                brand_options_btn.setOnClickListener(new View.OnClickListener() {


                    public void onClick(View v) {

                        arrayAdapter.clear();

                        brand_list.invalidate();
                        brand_list.setAdapter(brand_new_adapter);
                    }
                });

        //Material Options
        mat_options_btn.setOnClickListener(new View.OnClickListener() {


            public void onClick(View v) {
                //TODO Auto-generated method stub
                storeAdapter.clear();

                store_list.invalidate();

                store_list.setAdapter(store_new_adapter);
            }
        });


          Button btn_reset = (Button)dialog_refine.findViewById(R.id.btn_Refine_reset);
          btn_reset.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                //TODO Auto-generated method stub
                dialog_refine.dismiss();

            }
        });
          //Done Button
         Button done_btn=(Button)dialog_refine.findViewById(R.id.btn_Refine_Done);
        done_btn.setOnClickListener(new View.OnClickListener() {


                public void onClick(View v) {
                    //TODO Auto-generated method stub
                //checkflag=false;
                    count=1;
                    SearchResultActivity.arraylists_clear();
                    final_keyword=et_search.getText().toString()+brand_name+store_name;
                    Intent intent = new Intent(SearchGridActivity.this, SearchGridActivity.class);
                    intent.putExtra("keyword", keyword);
                    startActivity(intent);

                }
            });

                break;

            default:
                dialog_refine = null;
            }
            return dialog_refine;
        }

        protected void reload_storelist() {
            //TODO Auto-generated method stub

            slected_store= new ArrayAdapter<String>(this,R.layout.ref_row, R.id.label, store_selected);
            store_list.setAdapter(slected_store);
        }

        protected void reload_list() {
            //brand_list.invalidate();

            //arrayAdapter.clear();


            slected_brand = new ArrayAdapter<String>(this,R.layout.ref_row, R.id.label, brand_selected);
            brand_list.setAdapter(slected_brand);
            //brand_selected.clear();

        }    
    //Flurry Implementation
      public void onStart()
      {
         super.onStart();
         FlurryAgent.onStartSession(this, "AJT5DWUVF6IAE78NQV69");
         //your code
      }

      public void onStop()
      {
         super.onStop();
         FlurryAgent.onEndSession(this);
         //your code
      }
}

OriginaleL’autore Sanat Pandey | 2011-06-24

One Reply
  1. 7

    Non ho controllare tutto il codice, ma vedo un paio di problemi :

    1.

     grid.setAdapter(new ImageAdapter(this));//Load the GridView
     final ImageAdapter im = new ImageAdapter(this);
     im.notifyDataSetChanged();

    Non si è sicuri che cosa deve fare, è creare un nuovo ImageAdapter, e poi un secondo e chiamata notifyDataSetChanged su di esso, che sembra abbastanza inutile in quanto non è legato a qualsiasi visualizzazione.

    2. Il ImageAdapter classe è rotto, in particolare il metodo getView. L’idea principale dietro getView è che si riceve un convertView riciclare. Se è null, creare una visualizzazione e impostare le informazioni in esso. Se non è null, riutilizzare il convertView e impostare le informazioni in esso. Nel tuo codice, impostare solo le info se la vista è null, quindi, una volta che si scorre o modificare i dati in esso tenta di riciclare il punto di vista, e per voi non cambia il loro contenuto.

    Il metodo dovrebbe essere qualcosa di simile a

    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null){
            //No view passed, create one !
            LayoutInflater li = getLayoutInflater();
            v = li.inflate(R.layout.search_result_griditem, parent, false);
        }
    
        //Set the view's content
        TextView tv = (TextView)v.findViewById(R.id.txt_SearchResultGrid_Price);
        tv.setText(SearchResultActivity.min_price.get(position));
        ImageView iv = (ImageView)v.findViewById(R.id.img_SearchResultGrid_Product);
        iv.setImageBitmap(SearchResultActivity.me_bmp[position]);
        return v;
    }

    Si potrebbe anche mantenere un riferimento al tuo adattatore e chiamare notifyDataSetChanged quando si desidera che la GridView per aggiornamento il suo contenuto.

    Ultima cosa, probabilmente non si desidera che il getItemId metodo nella ImageAdapter per tornare a 0 per tutto il tempo, come il GridView utilizza l’id di gestire riciclato vista e tutti. Una più facile implementazione sarebbe

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

    Potrebbe anche essere la pena di riempire il metodo getItem.

    OriginaleL’autore Gregory

Lascia un commento