在android中选择网格视图的两个选定单元格之间的单元格范围?

时间:2016-10-12 09:55:26

标签: android gridview android-adapter android-gridview custom-adapter

我正在使用自定义适配器类实现网格视图以显示项目列表。 我想自动选择网格视图的单元格,如果它位于两个选定单元格之间。我的意思是说,如果用户选择单元格,则说它的位置为“0”,然后选择位置为“4”的单元格,然后选择否。细胞位于它们之间,说1,2和3会自动选择。

目前,我能够多选细胞,但细胞的范围尚未实施。

这是我的Activity类代码:

 gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {

            Toast.makeText(BookingActivity.this, "Hi click working" + position, Toast.LENGTH_SHORT).show();

            try {

                int selectedIndex = adapter.selectedPositions.indexOf(position);

                Log.d("selectedIndex", String.valueOf(selectedIndex));

                if (selectedIndex > -1) {
                    adapter.selectedPositions.remove(selectedIndex);

                    ((GridItemView) view).display(false);

                    Log.d("negative", String.valueOf(selectedIndex));
                } else {
                    adapter.selectedPositions.add(position);

                    selectedStrings.add(position);
                    int min = selectedStrings.get(0);
                    int max = selectedStrings.get(0);



                    for(int i = 0; i < selectedStrings.size(); i++) {

                        int number = selectedStrings.get(i);
                        if(number < min) min = number;
                        if(number > max) max = number;
                    }

                    Log.d("min", String.valueOf(min));

                    Log.d("max", String.valueOf(max));

                    for (int i = min; i<= max ; i++){

                        viewArrayList.add(gridView.getChildAt(i));

                        Log.d("view", parent.getChildAt(i).toString());
                    }

                   for (int i = 0; i<viewArrayList.size(); i++){

                       ((GridItemView) viewArrayList.get(i)).display(true);


                   }




                    Log.d("positive", String.valueOf(selectedIndex));
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    });

这是我的CustomAdapter类:

public class CustomGrid extends BaseAdapter {

private Context mContext;
private final ArrayList<String> web;
private ArrayList<Integer> selectedStrings;
ArrayList<Boolean> itemChecked = new ArrayList<Boolean>();
public List selectedPositions;

public CustomGrid(Context c,ArrayList<String> web) {
    mContext = c;
    this.web = web;
    selectedStrings = new ArrayList<Integer>();
    selectedPositions = new ArrayList<>();

   /* for (int i = 0; i < web.size(); i++) { // c.getCount() return total number of your Cursor
        itemChecked.add(i, false); // initializes all items value with false
    }*/

}

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

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return web.get(position);
}

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

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

        GridItemView customView = (convertView == null) ? new GridItemView(mContext) : (GridItemView) convertView;
    customView.display(web.get(position), selectedPositions.contains(position),position);


    return customView;

}

这是我的gridItemView类:

package com.philips.philipsreservation.Model;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;


public class GridItemView extends FrameLayout {


  private Button textView;

  private TextView textView1;

  View view,view1,view2;

public GridItemView(Context context) {
    super(context);
    LayoutInflater.from(context).inflate(R.layout.grid_single, this);
    textView = (Button) getRootView().findViewById(R.id.button3);
    textView1 = (TextView)getRootView().findViewById(R.id.textView14);
    view = (View)getRootView().findViewById(R.id.view2);
    view1 = (View)getRootView().findViewById(R.id.view3);
    view2 = (View)getRootView().findViewById(R.id.view1);
    textView1.setVisibility(View.GONE);
    view.setVisibility(View.GONE);
    view1.setVisibility(View.GONE);
}

public void display(String text, boolean isSelected,int position) {
    if (position % 5 == 0) {
        textView1.setVisibility(View.VISIBLE);
        view.setVisibility(View.VISIBLE);
        view1.setVisibility(View.VISIBLE);
        textView.setVisibility(View.GONE);
        view2.setVisibility(View.GONE);
        textView1.setText("11AM");
    }else {
        textView1.setVisibility(View.GONE);
        view.setVisibility(View.GONE);
        view1.setVisibility(View.GONE);
        textView.setVisibility(View.VISIBLE);
        view2.setVisibility(View.VISIBLE);
        textView.setText(text);
        display(isSelected);
    }
}

public void display(boolean isSelected) {
   // textView.setBackgroundResource(isSelected ? R.drawable.green_square : R.drawable.gray_square);
    if (isSelected){

        GradientDrawable bgShape = (GradientDrawable)textView.getBackground();
        bgShape.setColor(Color.GREEN);
    }else{

        GradientDrawable bgShape = (GradientDrawable)textView.getBackground();
        bgShape.setColor(Color.GRAY);
    }
  }

 }

我主要担心的是更改两个选定单元格之间的单元格颜色数量。任何帮助都会在高级中得到赞赏

0 个答案:

没有答案