2011-05-04 6 views
2

나는 ImageViews를 설정하기 위해 어댑터를 사용하는 GridView를 가지고 있으며, AlertDialog를 열고 TextView에 포커스를 맞추면 GridView의 위치가 바뀝니다. 어떻게 그 일을 막을 수 있습니까?안드로이드 애플 리케이션에서 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

감사합니다. 나는 그걸 알아 냈고, 설정 한 imageviews를 옮기고 if/else 아래에 textviews를 설정했습니다. – Yvonne

+0

보기 재활용을 해제하는 방법을 알고 있습니까? 왜냐하면 나는 URL에서 이미지를로드하기 위해 asynctask를 사용했기 때문에 계속 이동했다. – Tsunaze

관련 문제