2016-08-17 38 views
0

是我的適配器類我想在我的適配器中使用getView方法的GridView和它不工作?下面

public class ImageAdapter extends BaseAdapter { 
private Context context; 
public static ProfileData[]profileData={ 
     new ProfileData(R.drawable.profileone,"profile1"), 
     new ProfileData(R.drawable.profiletwo,"profile2"), 
     new ProfileData(R.drawable.profilethree,"profile3"), 
     new ProfileData(R.drawable.profilefour,"profile4"), 
     new ProfileData(R.drawable.profilefive,"profile5"), 
}; 



public ImageAdapter(Context context){ 
    this.context=context; 

} 

@Override 
public int getCount() { 
    return profileData.length; 
} 

@Override 
public Object getItem(int position) { 
    return profileData[position]; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(int position, View view, ViewGroup viewGroup) { 
    ImageView imageView=new ImageView(context); 
    imageView.setImageResource(profileData[position].getDrawable()); 
    return imageView; 
} 
} 

正如你可以告訴我創建了一個適配器的imageview的imageresource設置的配置文件。然而,我正在一個片段中實現itemonclick方法,並且我試圖在特定位置獲取imageview,但它不工作,有人能告訴我爲什麼嗎? 這裏是我的片段,我想獲得的ImageView的

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view=inflater.inflate(R.layout.fragment_welcome_fourth,container,false); 
    adapter=new ImageAdapter(getContext()); 

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 

      ImageView image=(ImageView) adapter.getView(position,view,null); 
      image.setColorFilter(Color.BLUE); 

     } 
    }); 
    return view; 

} 

回答

0

這是因爲getView()只是爲了被認爲可用於列表中的項目填寫,而不是其他。

你需要做的是在你的適配器中有一些變量來保存你的列表項的狀態。我假設您點擊時突出顯示整個列表項,即「選定」類型的狀態。

因此,例如,你可以在適配器中有這樣的:

private boolean[] selected = new boolean[profileData.length]; 

(這是一個簡單的方法,不是最好的方式。)

也是一個公共setter方法:

public void setSelected(int position, boolean sel) { 
     selected[position] = sel; 
     notifyDataSetChanged(); 
    } 

getView中,您使用此標誌設置您的顏色:

@Override 
    public View getView(int position, View view, ViewGroup viewGroup) { 
     ImageView imageView=new ImageView(context); 
     imageView.setImageResource(profileData[position].getDrawable()); 
     if (selected[position]) { 
      imageView.setColorFilter(Color.BLUE); 
     } else { 
      imageView.setColorFilter(null); 
     } 
     return imageView; 
    } 

而在事件處理程序,更新模型,並呼籲notifyDataSetChanged()

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
      ImageAdapter adapter = (ImageAdapter) adapterView.getAdapter(); 
      adapter.setSelected(position, true); 
     } 
    }); 

所以getView總是讀模型,事件處理程序總是更新模型。如果您發現自己試圖從事件處理程序中更改視圖,則知道自己做錯了事。

+0

偉大的答案男人!非常豐富 – Eli

相關問題