I am Implementing grid view with custom adapter class to show list of items. i want to automatically select the cell of grid view if it lies between two selected cell. i means to say that if user select cell let say its position is "0" and after that he select cell whose position is "4",then no. of cell lies between them say 1,2 and 3 would be automatically selected.
Presently,i am able to multi select the cell but range of cell is not being implemented.
Here is my Activity class code:
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();
}
}
});
This is my CustomAdapter class:
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;
}
This is my gridItemView Class:
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);
}
}
}
My main concern is to changed the number of cell color fall between two selected cell.Any Help would be Appreciated in advanced