我正在使用自定义适配器类实现网格视图以显示项目列表。 我想自动选择网格视图的单元格,如果它位于两个选定单元格之间。我的意思是说,如果用户选择单元格,则说它的位置为“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);
}
}
}
我主要担心的是更改两个选定单元格之间的单元格颜色数量。任何帮助都会在高级中得到赞赏