1

私は 5 列の girdview を持っており、クリックすると 5 つのセルを意味する行全体に色を付けたいと考えています。クリックは正常に機能しますが、クリックしてスクロールすると、ビューの位置が変わるため、2行または3行後のセルに色が設定されます。

これは私のグリッドビューです:

  <GridView
    android:id="@+id/gridView2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/CornflowerBlue"
    android:gravity="center"
    android:horizontalSpacing="5dp"
    android:numColumns="5"
    android:verticalSpacing="5dp">
</GridView>  

カスタムレイアウトがあります:

 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/LightBlue"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingLeft="6dip"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="22sp" />

およびgridviewアダプタの私のコード:

    public class Fragment2 extends Fragment {
     ............................


gridView2 = (GridView) getView().findViewById(R.id.gridView2);
        ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(
                getActivity(), R.layout.custom_layout, stg1); //stg1-array
        gridView2.setAdapter(adapter2);         
        gridView2.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                String message;

                int p = (int) Math.ceil(position / 5) * 5; //to color 5 cells from starting on click

                try{
            gridView2.getChildAt(p).setBackgroundColor(Color.GREEN);
            gridView2.getChildAt(p+1).setBackgroundColor(Color.GREEN);
            gridView2.getChildAt(p+2).setBackgroundColor(Color.GREEN);
            gridView2.getChildAt(p+3).setBackgroundColor(Color.GREEN);
            gridView2.getChildAt(p+4).setBackgroundColor(Color.GREEN);



            }
        });

最初は正常に動作しますが、スクロールした後、クリックしたセル以外のセルに色が設定されますか?? 私は何をすべきか??私はベースアダプターを使いたくありません....

4

1 に答える 1

2

これを試して、それがどのように機能するか教えてください。

public int p=-1;

 /*
...OTHER STUFF...

*/

gridView2 = (GridView) getView().findViewById(R.id.gridView2);

ListAdapter<String> adapter2 = new ListAdapter<String>(
            getActivity(), R.layout.custom_layout, stg1); //stg1-array
    gridView2.setAdapter(adapter2);         
    gridView2.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            String message;

            int p = (int) Math.ceil(position / 5) * 5; //to color 5 cells from starting on click
        }
    });

/*
...OTHER STUFF...

*/

public class ListAdapter extends ArrayAdapter<String> {
private List<String> items;

public ListAdapter(Context context, int resource, List<Item> items) {
super(context, resource, items);
this.items = items;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;

if (v == null) {
    LayoutInflater vi;
    vi = LayoutInflater.from(getContext());
    v = vi.inflate(R.layout.custom_layout, null);
    if(position==p) v.setBackgroundColor(Color.GREEN);
    if(position==p+1) v.setBackgroundColor(Color.GREEN);
    if(position==p+2) v.setBackgroundColor(Color.GREEN);
    if(position==p+3) v.setBackgroundColor(Color.GREEN);
    if(position==p+4) v.setBackgroundColor(Color.GREEN);
}      

return v;

}
}
于 2013-02-27T14:32:05.673 に答える