Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android GridView将保持高亮显示所选项目_Android_Gridview - Fatal编程技术网

Android GridView将保持高亮显示所选项目

Android GridView将保持高亮显示所选项目,android,gridview,Android,Gridview,我的布局有一个网格视图。与谷歌的API演示类似,每个网格都有一个图像。此外,我还定制了一个“可绘制图像”,用于突出显示当前选定的项目。触摸网格图像时,可显示“可绘制图像”。不幸的是,当我不接触网格时,它将消失 我希望GridView将继续突出显示所选项目。甚至用户也在滚动屏幕 从这里,我找到了一些类似的帖子 (一) (二) 但我不能理解他们的方法,他们没有使用自定义图像。 谁能给我一些帮助吗?求你了 以下是我的代码: gridAdapter adapter = new gridA

我的布局有一个网格视图。与谷歌的API演示类似,每个网格都有一个图像。此外,我还定制了一个“可绘制图像”,用于突出显示当前选定的项目。触摸网格图像时,可显示“可绘制图像”。不幸的是,当我不接触网格时,它将消失

我希望GridView将继续突出显示所选项目。甚至用户也在滚动屏幕

从这里,我找到了一些类似的帖子

(一)

(二)

但我不能理解他们的方法,他们没有使用自定义图像。 谁能给我一些帮助吗?求你了

以下是我的代码:

    gridAdapter  adapter =  new   gridAdapter  (this, images);
    gv = (GridView) findViewById (R.id.gridView1);
    gv.setAdapter(adapter);
    gv.setSelector(R.drawable.circle);
    gv.setDrawSelectorOnTop(true);
以下是我的更新代码:

public class GridViewBasic extends Activity {
    Integer[] imageIDs = {
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher    };
    GridView gridView;
    public int lastPos;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
            gridView = (GridView) findViewById(R.id.gridView1);
            gridView.setAdapter(new ImageAdapter(this));
            gridView.setSelected(true);
            gridView.setSelector(R.drawable.circle);
            gridView.setDrawSelectorOnTop(true);
            gridView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

            gridView.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent,  View v, int position, long id) {   
                    lastPos = position;
                    gridView.setSelection((int)(gridView.getAdapter()).getItemId(lastPos));
                    System.out.println ("getItemId ="+(gridView.getAdapter()).getItemId(lastPos));

                }
            });        
        }

        public class ImageAdapter extends BaseAdapter 
        {
            private Context context;

            public ImageAdapter(Context c)  {
                context = c;
            }

            //---returns the number of images---
            public int getCount() {
                return imageIDs.length;
            }

            //---returns the ID of an item--- 
            public Object getItem(int position) {
                return position;
            }

            public long getItemId(int position) {
                return position;
            }

            //---returns an ImageView view---
            public View getView(int position, View convertView, ViewGroup parent) {
                ImageView imageView;

                if (convertView == null) {
                    imageView = new ImageView(context);
                    imageView.setLayoutParams(new GridView.LayoutParams(185, 185));
                    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    imageView.setPadding(5, 5, 5, 5);
                } else {
                    imageView = (ImageView) convertView;
                }
                imageView.setImageResource(imageIDs[position]);

                return imageView;
            }
        }    


}
公共类GridViewBasic扩展活动{
整数[]图像ID={
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_launcher};
GridView;
公共邮政局;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView=(gridView)findViewById(R.id.gridView1);
setAdapter(新的ImageAdapter(this));
gridView.setSelected(true);
gridView.setSelector(R.可绘制圆);
setDrawSelectorOnTop(true);
gridView.SetDegenantFocusability(ViewGroup.FOCUS在子体之后);
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
lastPos=位置;
gridView.setSelection((int)(gridView.getAdapter()).getItemId(lastPos));
System.out.println(“getItemId=“+(gridView.getAdapter()).getItemId(lastPos));
}
});        
}
公共类ImageAdapter扩展了BaseAdapter
{
私人语境;
公共图像适配器(上下文c){
上下文=c;
}
//---返回图像的数量---
public int getCount(){
返回imageid.length;
}
//---返回项目的ID--
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
//---返回ImageView视图---
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
if(convertView==null){
imageView=新的imageView(上下文);
setLayoutParams(新的GridView.LayoutParams(185185));
imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
设置填充(5,5,5,5);
}否则{
imageView=(imageView)convertView;
}
setImageResource(ImageId[position]);
返回图像视图;
}
}    
}

好了,现在需要一个全新的答案

事情是这样的:
setSelected()
将把调用视图设置为选中,从而随后给出焦点

召唤

 GridView gv; gv.setSelected(true);
将选择GridView gv,而不是所需的GridView适配器中的视图

因此,您需要调用
gv.setSelection(pos)
来选择特定的子项

您正在保存的
pos
可能不是实际位置,而是“可见”偏移的位置。这就是你必须打电话的原因

(gridView.getAdapter()).getPosition(viewThatYouWant);

请注意,您应该研究视图如何处理其焦点与子焦点 方法被调用

setDescendantFocusability
所以你自然会想要

GridView gv; gv.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
公共类StaffSelectionAdapter扩展BaseAdapter{
私人语境;
私有最终字符串[]staffMemberList;
private int previousPosition=-1;
私有静态布尔值是第一次;
布尔[]被检查;
私有TextView TextView=null;
公共长钉;
私人充气机;
公共StaffSelectionAdapter(上下文上下文,字符串[]staffMemberList){
this.context=上下文;
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
this.staffMemberList=staffMemberList;
isFirstTime=true;
isChecked=new boolean[staffMemberList.length];
for(int i=0;iGridView gv; gv.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
public class StaffSelectionAdapter extends BaseAdapter {

private Context context;

private final String[] staffMemberList;
private int previousPosition = -1;
private static boolean isFirstTime;
boolean[] isChecked;
private TextView textView = null;
public long staffId;
private LayoutInflater inflater;


public StaffSelectionAdapter(Context context, String[] staffMemberList) {
    this.context = context;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.staffMemberList = staffMemberList;

    isFirstTime = true;
    isChecked = new boolean[staffMemberList.length];
    for (int i = 0; i < staffMemberList.length; i++) {
        isChecked[i] = false;
    }
}

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

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.row_for_staff_selection, null);
    }
    textView = (TextView) convertView.findViewById(R.id.row_for_staff_selection_grid_item_label);
    textView.setText(staffMemberList[position]);

    if (isChecked[position]) {
        SpannableString content = new SpannableString(staffMemberList[position]);
        content.setSpan(new UnderlineSpan(), 0, staffMemberList[position].length(), 0);
        textView.setText(content);
    } else {
        textView.setBackgroundColor(context.getResources().getColor(R.drawable.dialog_bg));
    }

    convertView.setTag(position);
    convertView.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            if (!isChecked[position]) {
                staffId = 

                isChecked[position] = true;
                if (!isFirstTime) {
                    isChecked[previousPosition] = false;
                } else {
                    isFirstTime = false;
                }
                textView.setBackgroundColor(context.getResources().getColor(R.drawable.dialog_bg));
            }
            previousPosition = (Integer) v.getTag();
            notifyDataSetChanged();
        }
    });
    return convertView;
}

public int getCount() 
    {
    return staffMemberList.length;
}

public Object getItem(int position) 
    {
    return staffMemberList[position];
}

public long getItemId(int position) {
    return 0;
}

public long getStaffId() {
    return staffId;
}

public void setStaffId(long staffId) {
    this.staffId = staffId;
}

}
public ColorGridAdapter(Context context,ArrayList<String> colorArray,int position) {
                super(context, resource,colorArray);            
                this.context = context;
                this.colors = colorArray;
                this.selected_position = position;  // position of your selected item

            }

    public View getView(final int position, View convertView, ViewGroup parent){
                View v = convertView;
                if (v == null) {

    LayoutInflater inflater = (LayoutInflater)  getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        v = inflater.inflate(R.layout.color_pelatte, null);
                        ColorView = (View)v.findViewById(R.id.color_view);          
                    }

                ColorView.setBackgroundColor(Color.parseColor(colors.get(position)));
                if(position == selected_position){
                    v.setBackground(context.getResources().getDrawable(R.drawable.edittext_background));
                }
 <GridView
    android:id="@+id/gv_calender"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:numColumns="7"
    android:listSelector="@color/colorAccent"
    android:stretchMode="columnWidth"></GridView>
  GridView gvCalender = (GridView)findViewById(R.id.gv_calender);
  CalendarAdapter adapter = new CalendarAdapter(getActivity(), lsCalender);
    gvCalender.setDrawSelectorOnTop(false);
    gvCalender.setAdapter(adapter);