2011-06-24 16 views
6

Url'den ayrıştırılan ızgara görünümünde görüntüler göstermeme sorunu var, ızgara görünümünde aramayı hassaslaştırmak için bir hassas arama iletişim kutusu tasarladım ancak sorun ayrıştırma işleminin iyi çalıştığını ama Aramayı İyileştir işlenirken bir dahaki sefere ızgara görünümü yenilenmez. Grid View öğeleri, yenilenmiş bir ürün değil, önceki sonuçları gösterir. Lütfen bu Problem için bana yardım edin.Refresh Grid View Android'de Dyanmically

Kodu:

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 
     } 
} 

cevap

7

Bütün kodunuzu kontrol değil ama bazı sorunlar görebilirsiniz:

1.

bu için ne gerekiyor
grid.setAdapter(new ImageAdapter(this));//Load the GridView 
 final ImageAdapter im = new ImageAdapter(this); 
 im.notifyDataSetChanged(); 

Emin değilim Bunu yapmak için, yeni bir ImageAdapter yaratıyorsunuz ve bir saniye sonra notifyDataSetChanged'ı çağırıyorsunuz, bu da herhangi bir görünüme bağlı olmadığı için işe yaramaz gibi görünüyor.
2. ImageAdapter sınıfınız özellikle getView yönteminde bozuk. GetView’in arkasındaki ana fikir, convertView’ın geri dönüştürülmesini sağlamaktır. Eğer boşsa, bir görünüm oluşturun ve içindeki bilgiyi ayarlayın. Eğer boş değilse, convertView'ı tekrar kullanın ve içindeki bilgiyi ayarlayın. Kodunuzda, yalnızca görünüm boşsa, bilgiyi ayarlarsınız, böylece verileri kaydettiğinizde veya değiştirdiğinizde görünümleri geri dönüştürmeyi deneyecek ve içeriklerini değiştirmeyeceksiniz.

Ayrıca adaptör bir başvuru tutmak ve için GridView içeriğini yenilemek istediğinizde notifyDataSetChanged diyebiliriz şey

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; 
} 

gibi yöntem olmalıdır.

Son olarak, GridView'ın geri dönüştürülmüş görünümleri ve tümünü yönetmek için bu kimliği kullanması nedeniyle, muhtemelen ImageAdapter öğesindeki getItemId yönteminin her zaman 0 değerini döndürmesini istemezsiniz. Daha kolay bir uygulama, getItem yöntemini doldurmaya da değer olabilir.