2011-05-04 21 views
2

我有一個GridView,它使用一個適配器來設置ImageViews,並且當我打開一個AlertDialog並且專注於它的TextView時,GridView位移圖像。我如何阻止這種情況發生?如何在android應用程序中的gridview中停止位置圖像

import android.content.Context; 
import android.graphics.BitmapFactory; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class ImageAdapter extends BaseAdapter { 
private Context context; 
private String[] directory; 

public ImageAdapter(Context c, String[] d) { 
    this.context = c; 
    this.directory = d; 
} 

public int getCount() { 
    return directory.length; 
} 

public Object getItem(int position) { 
    return directory[position]; 
} 

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

// create a new ImageView for each item referenced by the Adapter 
public View getView(int position, View convertView, ViewGroup parent) { 
    System.gc(); 
    View v; 
    if (convertView == null) { // if it's not recycled, initialize some attributes 
     LayoutInflater li = LayoutInflater.from(context); 
     v = li.inflate(R.layout.iblock, null); 

     ImageView iv = (ImageView)v.findViewById(R.id.foodImage); 
     BitmapFactory.Options bfo = new BitmapFactory.Options(); 
     bfo.inSampleSize = 2; 
     iv.setImageBitmap(BitmapFactory.decodeFile(directory[position], bfo)); 

     TextView tv = (TextView)v.findViewById(R.id.foodName); 
     String[] s = directory[position].split("[\\/.]+"); 

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


protected Dialog onCreateDialog(int id) { 
    switch(id) { 
    case DIALOG_SEARCH_ID: 
     LayoutInflater factory = LayoutInflater.from(this); 
     View searchView = factory.inflate(R.layout.searchbar2, null); 

     final EditText searchfield = (EditText) searchView.findViewById(R.id.searchfield); 

     ImageButton ib = (ImageButton) searchView.findViewById(R.id.searchbutton); 
     ib.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(getApplicationContext(), SearchResults.class); 
       i.putExtra("query", searchfield.getText().toString()); 
       startActivity(i); 
      } 
     }); 

     AlertDialog ad = new AlertDialog.Builder(SearchResults.this) 
      .setView(searchView) 
      .create(); 
     Window win = ad.getWindow(); 
     win.setGravity(48); 
     return ad; 
    } 
    return null; 
} 

回答

1

您的View回收損壞。當您給View回收時,您仍然需要將數據綁定到它(在這種情況下,將圖像放入ImageView)。在回收View時,您可以跳過的唯一部分是擴大布局。

+0

謝謝,我發現,我也移動了設置的圖像並在if/else下面設置了文本視圖 – Yvonne 2011-05-04 06:51:34

+0

你知道如何關閉視圖回收嗎?因爲我使用了一個asynctask從url加載圖像,並且它不斷移動。 – Tsunaze 2011-09-07 10:01:23

相關問題