读书人

android gridview 滑动后选项异常处理

发布时间: 2012-11-06 14:07:00 作者: rapoo

android gridview 滑动后选项错误处理的两种方法

1.先上main布局(main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<GridView android:layout_width="wrap_content"
android:layout_height="150dip"
android:id="@+id/gridview"
android:gravity="center_horizontal"
android:horizontalSpacing="5px"

/>
</LinearLayout>

2.组成Gridview的子布局(gridview.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linear"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<TextView
android:id="@+id/gridtext"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

3.具体实现代码

public class OtherActivity extends Activity {
private String str = "A15B3456183CS";
private GridView gv;
private TextView textview;
private GridAdapter adapter;
int result;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gv = (GridView) findViewById(R.id.gridview);
adapter=new GridAdapter();
gv.setAdapter(adapter);
gv.setNumColumns(str.length());
}

private class GridAdapter extends BaseAdapter {

@Override
public int getCount() {
// TODO Auto-generated method stub
return str.length();
}

@Override
public Object getItem(int pos) {
// TODO Auto-generated method stub
return pos;
}

@Override
public long getItemId(int pos) {
// TODO Auto-generated method stub
return pos;
}

Object tvPos;

@Override
public View getView(int pos, View convertView, ViewGroup arg2) {
if (convertView == null) {// 第一屏
convertView = LayoutInflater.from(OtherActivity.this).inflate(
R.layout.gridview_child, null);
}
LinearLayout linear = (LinearLayout) convertView
.findViewById(R.id.linear);
textview = (TextView) convertView
.findViewById(R.id.gridtext);
textview.setText(str.charAt(pos) + "");
linear.setOnClickListener(new OnClick(pos, textview));
// 以position标记
linear.setTag(pos);
return convertView;
}

class OnClick implements OnClickListener {
public int pos;
private TextView tview;

public OnClick(int pos, TextView tview) {
this.pos = pos;
this.tview = tview;
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (tvPos != null) {
LinearLayout tv = (LinearLayout) gv.findViewWithTag(tvPos);
TextView tt = (TextView) tv.getChildAt(0);// 从Layout中获得子view
tt.setTextColor(Color.WHITE);
}
tview.setTextColor(Color.RED);
tvPos = pos;
}
}

}

}

另一种方法:

在Android应用开发中,很多时候都会遇到这样的需求,一个listView,含有N项,当点击某项时,该项展开,显示该项中隐藏的某些控件,再点击,该项收回,重新隐藏部分控件,当一项打开状态,点击另一项,另一项展开,该项关闭。(说的有点绕,看下图)

在去年的时候,自己的一篇文章(http://blog.csdn.net/aomandeshangxiao/article/details/6643831),里面有Item的选择问题,用的方法比较笨,要遍历一遍,把所有的item全部都设置一下,应该是很浪费资源的。还有一个问题就是,当listview的item多于一个屏幕的时候,会出现重复选择问题,就是当你选中一项滑动的时候,可能会发现滑动后出现的某项也是在选中状态,这个问题令人十分抓狂。见网上有个方法是:在adapter的getView里面不使用convertview。每一个view都是重新创建一个。能够解决问题,但是还是有点浪费资源。

先看下效果图:第二项被选中

android gridview 滑动后选项异常处理的两种方法

第四项被选中:

android gridview 滑动后选项异常处理的两种方法


这个方法也是在他人的帮助下,努力得来,分享一下!

  • <?xml version="1.0" encoding="utf-8"?> <LinearLayout
  • xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
  • android:layout_height="wrap_content" android:orientation="vertical"
  • > <TextView
  • android:id="@+id/textView" android:layout_width="wrap_content"
  • android:layout_height="wrap_content" android:text="Test"
  • android:textSize="20sp" />
  • <LinearLayout android:id="@+id/hint_image"
  • android:layout_width="match_parent" android:layout_height="wrap_content"
  • android:orientation="horizontal" android:visibility="gone">
  • <ImageView android:id="@+id/image_uefa"
  • android:layout_width="0dp" android:layout_height="60dp"
  • android:layout_weight="1" android:src="@drawable/uefa"
  • /> <ImageView
  • android:id="@+id/image_mascot" android:layout_width="0dp"
  • android:layout_height="60dp" android:layout_weight="1"
  • android:src="@drawable/mascot" />
  • </LinearLayout>
  • </LinearLayout>

  • 读书人网 >Android

    热点推荐