前言
這個問題在之前做一個盒子項目時遇到過,最近又遇到了,使用GridView遇到的非常奇葩的問題,這里記錄分享一下。
聲明
歡迎轉載,但請保留文章原始出處:)
博客園:http://www.cnblogs.com
農民伯伯: http://over140.cnblogs.com
正文
一、問題
1.1 先看問題代碼:
@Override
public View getView( int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_feed_grid_item, parent, false);
convertView.findViewById(R.id.avatar).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// startActivity
}
});
}
convertView.setLayoutParams( new GridView.LayoutParams(mWindowWidth / 3, mWidowWidth / 3));
// 其他代碼
return convertView;
}
public View getView( int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_feed_grid_item, parent, false);
convertView.findViewById(R.id.avatar).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// startActivity
}
});
}
convertView.setLayoutParams( new GridView.LayoutParams(mWindowWidth / 3, mWidowWidth / 3));
// 其他代碼
return convertView;
}
代碼的目的是希望根據屏幕的寬度動態設置GridView內Item的大小,很自然就這么寫了。
1.2 具體症狀
1.2.1 第一個Item的ImageView顯示不全,總是顯示一半,其他的Item沒有問題,如論怎么設置都沒用
1.2.2 第一個Item里面設置的點擊事件不管用,但是輕輕的滾動一下點擊事件立馬就生效了。
二、解決辦法
@Override
public View getView( int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_feed_grid_item, parent, false);
convertView.setLayoutParams( new GridView.LayoutParams(mWindowWidth / 3, mWindowWidth / 3));
convertView.findViewById(R.id.user_avatar).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// startActivity
}
});
}
// 其他代碼
return convertView;
}
public View getView( int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_feed_grid_item, parent, false);
convertView.setLayoutParams( new GridView.LayoutParams(mWindowWidth / 3, mWindowWidth / 3));
convertView.findViewById(R.id.user_avatar).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// startActivity
}
});
}
// 其他代碼
return convertView;
}
如上即可。
三、相關文章
Why is changing where layout parameters are set solving my “OnClickListener not working for first item in GridView” issue?
結束
博客日漸荒廢,還是要勤寫。