我正在显示自定义列表视图,我想要从另一个按钮遍历列表,列表向下,一个用于列表,所以在这里我能够获得当前所选项目位置所以我正在使用 -
list.setSelection(newpostion);
但我无法看到给定位置的突出显示。在这里, list 正在被正确遍历,但是用户无法看到他当前在哪个列表项目上。所以请告诉我如何突出显示或更改特定列表项的背景。
我尝试使用选择器,就像状态更改背景一样,但是对我不起作用。请提供任何有效的解决方案。
这是列表适配器的代码 -
package com.sho;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.TextView;
public class list_adapter extends ArrayAdapter<HashMap<String,String>>
{
ArrayList<HashMap<String,String>> items;
LayoutInflater mInflater ;
Context context;
int layoutResourceId;
public list_adapter(Context context, int layoutResourceId, ArrayList<HashMap<String, String>> _list)
{
super(context, layoutResourceId, _list);
this.layoutResourceId=layoutResourceId;
this.items = _list;
this.context=context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
ViewHolder holder = new ViewHolder();
if(row==null)
{
mInflater = ((Activity)context).getLayoutInflater();
row = mInflater.inflate(R.layout.chapterdetails, parent, false);
holder.name = (TextView) row.findViewById(R.id.chapterdata);
}
else
{
holder=(ViewHolder)row.getTag();
}
row.setTag(holder);
row.setId(position);
HashMap<String,String> map=items.get(position);
holder.name.setText(map.get("DESCRIPTION"));
return row;
}
static class ViewHolder
{
TextView name;
ImageButton annotion,bookmark,edit;
}
}
我希望遍历列表的按钮的代码,这里的列表名称是ls -
View earliest=new View(MainActivity.this);
if(postion<a1&&postion<=a1-2)
{
postion++;
earliest=ls.getRootView().findViewById(postion);
earliest.setBackground(null);
View v=new View(MainActivity.this);
v=ls.getRootView().findViewById(postion);
v.setBackgroundColor(Color.RED);
previous.setBackgroundColor(Color.BLUE); // your list
previous=v;
} } });
答案 0 :(得分:0)
这可能与可聚焦性有关。如果您有一个自定义列表视图,其中包含可聚焦对象,请尝试使它们不可聚焦。
aButtonInYourListView.Focusable = false;
aButtonInYourListView.FocusableInTouchMode = false;
对ListViewAdapter中的所有按钮,图像按钮执行此操作。它也可以从xml中完成,但不能从我的经验中获得图像按钮。在代码中这样做是为了安全起见。
这应该允许ListViewItems可聚焦。
答案 1 :(得分:0)
修改强>:
设置list.setSelection(newpostion);
像这样得到那个视图
View v=list.getSelectedView();
然后是相同的逻辑
您的代码就像这样
创建全局变量
View previous;
在onCreate
中初始化它previous=new View(this);
traverse_listdown.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("down");
int a1=list.getCount();
if(postion<a1&&postion<=a1-2) {
postion++; list.setSelection(postion);
View v1=new View(MainActivity.this);
v1=list.getSelectedView();
v1.setBackgroundColor(Color.RED);
previous.setBackgroundColor(Color.WHITE); // your list
previous=v1;
} } });
试试这个,
像这样创建一个可绘制的选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/pause_button"
android:state_selected="true" />
<item android:drawable="@drawable/play_button" />
</selector>
您可以指定您选择的颜色或颜色。
像这样创建全局变量
View previous;
初始化
previious=new View(context);
当你的listitem点击时使用这个
yourlist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view, int arg2,long arg3) {
previous.setSelected(false);
view.setSelected(true);
previous=view;
}
});