Android使用自定义适配器设置高亮显示的选定listview项
我需要你的帮助。我的问题是我需要突出显示所选的listview项。请注意,它只需要设置单个项,而不需要设置多个项 以下是我迄今为止所尝试的:Android使用自定义适配器设置高亮显示的选定listview项,android,listview,android-listview,Android,Listview,Android Listview,我需要你的帮助。我的问题是我需要突出显示所选的listview项。请注意,它只需要设置单个项,而不需要设置多个项 以下是我迄今为止所尝试的: @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; if(convertView == null) { inflater = (Lay
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if(convertView == null) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_video_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.background = (LinearLayout) convertView.findViewById(R.id.background);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
result = new HashMap<>();
result = data.get(position);
if(firstTimeStartup && position == 0) { // default selected
result = data.get(0);
highlightCurrentRow(viewHolder.background);
} else {
unhighlightCurrentRow(viewHolder.background);
}
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result = data.get(position);
if (firstTimeStartup) { // first time highlight first row
firstTimeStartup = false;
result = data.get(0);
unhighlight(viewHolder.background, 0);
}
highlightCurrentRow(viewHolder.background);
});
return convertView;
}
private void unhighlightCurrentRow(View rowView) {
rowView.setBackgroundResource(android.R.color.transparent);
}
private void highlightCurrentRow(View rowView) {
rowView.setBackgroundResource(R.color.main_blue);
}
private Boolean firstTimeStartup = true;
@覆盖
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
充气器=(充气器)上下文
.getSystemService(上下文布局\充气机\服务);
convertView=充气机。充气(R.layout.list\u video\u项,父项,false);
viewHolder=新的viewHolder();
viewHolder.background=(LinearLayout)convertView.findViewById(R.id.background);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
结果=新的HashMap();
结果=数据。获取(位置);
如果(firstTimeStartup&&position==0){//默认选中
结果=数据。获取(0);
highlightCurrentRow(viewHolder.background);
}否则{
取消高亮CurrentRow(viewHolder.background);
}
convertView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
结果=数据。获取(位置);
如果(firstTimeStartup){//第一次高亮显示第一行
firstTimeStartup=false;
结果=数据。获取(0);
取消高亮度(viewHolder.background,0);
}
highlightCurrentRow(viewHolder.background);
});
返回视图;
}
私有void unhighlightCurrentRow(视图rowView){
setBackgroundResource(android.R.color.transparent);
}
私有void highlightCurrentRow(视图rowView){
rowView.setBackgroundResource(R.color.main_蓝色);
}
私有布尔值firstTimeStartup=true;
但问题是,当我单击convertView时,无法取消高亮显示该项目。此外,当我尝试单击其他项目时,默认(第一个)项目也没有取消高亮显示。如果有任何帮助,将不胜感激。谢谢!convertView.setOnClickListener(new View.OnClickListener(){
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result = data.get(position);
for(int i=0;i<data.size();i++){
if(i == position){
highlightCurrentRow(viewHolder.background);
}
else{
unhighlightCurrentRow(viewHolder.background);
}
}
});
@凌驾
公共void onClick(视图v){
结果=数据。获取(位置);
对于(int i=0;i创建如下方法:
CustomAdapter extends BaseAdapter {
int selectedPosition=0;
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if(position==selectedPosition){
highlightCurrentRow(viewHolder.background);
}else{
unhighlightCurrentRow(viewHolder.background);
}
}
void highlightUnhighlight(int position){
seslectedPostion= postion;
notifyDatasetChanged
}
}
在onItemClickListener中调用highlightUnhighlight(position)。我编辑了您的代码,请检查此代码是否可以解决您的问题。我在项目中使用了此代码
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if(convertView == null) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_video_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.background = (LinearLayout) convertView.findViewById(R.id.background);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
result = new HashMap<>();
result = data.get(position);
if(firstTimeStartup[position]) { // default selected
result = data.get(0);
highlightCurrentRow(viewHolder.background);
} else {
unhighlightCurrentRow(viewHolder.background);
}
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result = data.get(position);
if (firstTimeStartup[position]) {
Arrays.fill(firstTimeStartup, Boolean.FALSE);
firstTimeStartup[position] = false;
result = data.get(0);
unhighlight(viewHolder.background, 0);
}else{
Arrays.fill(firstTimeStartup, Boolean.FALSE);
firstTimeStartup[position] = true;
highlightCurrentRow(viewHolder.background);
}
notifyDataSetChanged();
});
return convertView;
}
private void unhighlightCurrentRow(View rowView) {
rowView.setBackgroundResource(android.R.color.transparent);
}
private void highlightCurrentRow(View rowView) {
rowView.setBackgroundResource(R.color.main_blue);
}
private Boolean firstTimeStartup[] = new Boolean[data.size()];
firstTimeStartup[0]=true;
@覆盖
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
充气器=(充气器)上下文
.getSystemService(上下文布局\充气机\服务);
convertView=充气机。充气(R.layout.list\u video\u项,父项,false);
viewHolder=新的viewHolder();
viewHolder.background=(LinearLayout)convertView.findViewById(R.id.background);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
结果=新的HashMap();
结果=数据。获取(位置);
如果(firstTimeStartup[position]){//默认选中
结果=数据。获取(0);
highlightCurrentRow(viewHolder.background);
}否则{
取消高亮CurrentRow(viewHolder.background);
}
convertView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
结果=数据。获取(位置);
if(firstTimeStartup[位置]{
fill(firstTimeStartup,Boolean.FALSE);
firstTimeStartup[位置]=假;
结果=数据。获取(0);
取消高亮度(viewHolder.background,0);
}否则{
fill(firstTimeStartup,Boolean.FALSE);
firstTimeStartup[位置]=真;
highlightCurrentRow(viewHolder.background);
}
notifyDataSetChanged();
});
返回视图;
}
私有void unhighlightCurrentRow(视图rowView){
setBackgroundResource(android.R.color.transparent);
}
私有void highlightCurrentRow(视图rowView){
rowView.setBackgroundResource(R.color.main_蓝色);
}
私有布尔值firstTimeStartup[]=新布尔值[data.size()];
firstTimeStartup[0]=真;
Hi这部分起作用,但当我单击其他项目时,默认选中的项目不会取消高亮显示。它一次只能选择一个项目。项目只有在再次单击时才会取消高亮显示。这不应该。我选择行时如何?当您选择一行时,这意味着您的on item click将被调用,并且您将高亮显示当前行并取消所有其他行的高亮显示。