概述
java - Android ListView选中的项目保持突出显示
我有一个XML,有两个ListView,一个有一个客户列表,由一个选择查询填充(lv_cli),另一个有客户选择的详细信息(lv_cli_det)。我想在lv_cli中选择客户端,而lv_cli_det则显示详细信息。
XML:
android:id="@+id/cli_lista"
android:layout_width="512dp"
android:layout_height="wrap_content"
android:fadeScrollbars="false"
>
android:id="@+id/cli_lista_det"
android:layout_width="512dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/cli_lista"
android:fadeScrollbars="false" >
Java的:
Cursor cursor = db.rawQuery("Select NrCl||';'||Nome From Clientes", null);
final ListView t = (ListView)findViewById(R.id.cli_lista);
ArrayAdapter myarrayAdapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, listItems);
t.setAdapter(myarrayAdapter);
final ListView td = (ListView)findViewById(R.id.cli_lista_detalhe);
final ArrayAdapter myarrayAdapter2 = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, listItems2);
t.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
String item = ((TextView)view).getText().toString();
String[] strArray = item.split("\;");
cli.load(strArray[0].toString());
td.setAdapter(myarrayAdapter2);
listItems2.clear();
listItems2.add("Nome: " + cli.getNome());
listItems2.add("Morada: " + cli.getMorada());
listItems2.add("Localidade: " + cli.getLoca());
listItems2.add("Código Postal: " + cli.getCp());
listItems2.add("Pais: " + cli.getPais());
listItems2.add("Nif: " + cli.getNif());
listItems2.add("Tel: " + cli.getTel());
listItems2.add("Tlm: " + cli.getTlm());
listItems2.add("Tipo Preço: " + cli.getTipoPvn());
listItems2.add("Cond. Pagamento: " + cli.getCpg());
listItems2.add("Obs: " + cli.getObs());
td.setAdapter(myarrayAdapter2);
myarrayAdapter2.notifyDataSetChanged();
}
});
9个解决方案
152 votes
找到了正确的方法。 这很简单。在资源描述如下:
android:choiceMode="singleChoice"
android:listSelector="#666666"
(或者您可以指定资源链接而不是颜色值)
的程序化:
listView.setSelector(Drawable selector)
listView.setSelector(int resourceId)
listView.setChoiceMode(int mode)
模式可以是以下之一:AbsListView.CHOICE_MODE_SINGLE,AbsListView.CHOICE_MODE_MULTIPLE,AbsListView.CHOICE_MODE_NONE(默认)
(AbsListView是ListView类的抽象祖先)
附: 使用onItemClick进行操作并更改视图背景是破产的,因为视图本身是一个临时对象。 因此,您不得跟踪视图。
如果我们的列表足够长,则与滚动项相关联的视图将从层次结构中删除,并且将在再次显示这些项时重新创建(使用缓存的显示选项,例如背景)。 因此,我们跟踪的视图现在不是项目的实际视图,更改其背景对实际项目视图没有任何作用。 因此,我们选择了多个项目。
AJG answered 2019-05-26T09:47:19Z
126 votes
要在按下列表视图项时保持其颜色,请在列表视图项布局中包含以下行:
android:background="@drawable/bg_key"
然后在res/values/colors.xml文件夹中定义bg_key.xml,如下所示:
android:state_selected="true"
android:drawable="@color/pressed_color"/>
android:drawable="@color/default_color" />
最后,请将此内容包含在您的res/values/colors.xml onClickListener中:
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position,long arg3) {
view.setSelected(true);
... // Anything
}
});
这样,任何时候都只会选择一个项目进行颜色选择。 您可以在res/values/colors.xml中使用以下内容定义颜色值:
#4d90fe
#ffffff
Neoh answered 2019-05-26T09:46:07Z
35 votes
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
for (int j = 0; j < adapterView.getChildCount(); j++)
adapterView.getChildAt(j).setBackgroundColor(Color.TRANSPARENT);
// change the background color of the selected element
view.setBackgroundColor(Color.LTGRAY);
});
也许您可能希望使用索引i将当前所选元素保存在全局变量中。
Chris623 answered 2019-05-26T09:47:46Z
11 votes
简单的方法是,如果您在xml中使用listview,请在listview上使用此属性,
android:choiceMode="singleChoice"
android:listSelector="#your color code"
如果不是通过编程方式使用xml
listview.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
listview.setSelector(android.R.color.holo_blue_light);
Ashana.Jackol answered 2019-05-26T09:48:19Z
3 votes
你需要像这样的选择器:
然后将android:choiceMode="singleChoice"设置为ListView。
Крум Илиев answered 2019-05-26T09:48:52Z
2 votes
来自Avinash Kumar Pankaj的例子
View v;
然后在oncreate方法
v = new View(getActivity());
然后我写的onlistitemclick方法
public void onListItemClick(ListView listView, View view, int position,
long id) {
v.setBackgroundResource(0);
view.setBackgroundResource(R.color.green);
v = view;
}
它对我有用。 谢谢。
我换了
v = new View(getActivity());
至
v = new View(this);
并且代码运作良好。
前面的例子中的xml文件'colors'和'bg_key'也是必要的,以及ListView属性android:background =“@ drawable / bg_key”
毛罗
Mauro Simoes answered 2019-05-26T09:49:59Z
2 votes
*请确保列表视图容器的根布局中没有Ripple
将此行添加到列表视图中
android:listSelector="@drawable/background_listview"
这是“background_listview.xml”文件
background_listview.xml文件中使用的颜色:
#cc7e00
#ffffffff
在这之后
(单击项目包含橙色,直到您单击另一个项目)
ShahinFasihi answered 2019-05-26T09:50:58Z
1 votes
您可以这样做的一种方法是跟踪活动中当前选定的位置:
@Override
public void onItemClick(AdapterView> arg0, View arg1, int position,
long arg3) {
currentPosition = position
lv_cli.notifyDataSetChanged();
}
现在,请确保为列表项的父布局(linearLayout,boxLayout,relativeLayout,...,无论您喜欢什么)分配ID。
然后在ListView中你可以做这样的事情:
layoutBackground = (LinearLayout) convertView.findViewById(R.id.layout_background);
if (YourActivity.this.currentPosition == position) {
layoutBackground.setBackgroundColor(YourActivity.this.getResources().getColor(R.color.hilight_color));
} else{
layoutBackground.setBackgroundResource(R.drawable.list_item_drawable);
}
基本上,只需将hilight颜色设置为背景,当它等于当前所选位置时。请注意在未选择项目时如何设置可绘制的背景资源。 这可能与您的情况不同(因为您没有发布任何代码)。 在我的情况下,这个drawable是一个选择器,确保按下时项目高亮。
注意:这个简单的代码不使用视图持有者,但我真的 建议使用一个。
Tristan Vanderaerden answered 2019-05-26T09:51:54Z
0 votes
请改用id:
即使列表很长,这是最容易处理的方法:
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Holder holder=new Holder();
View rowView;
rowView = inflater.inflate(R.layout.list_item, null);
//Handle your items.
//StringHolder.mSelectedItem is a public static variable.
if(getItemId(position)==StringHolder.mSelectedItem){
rowView.setBackgroundColor(Color.LTGRAY);
}else{
rowView.setBackgroundColor(Color.TRANSPARENT);
}
return rowView;
}
然后在你的onclicklistener中:
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
StringHolder.mSelectedItem = catagoryAdapter.getItemId(i-1);
catagoryAdapter.notifyDataSetChanged();
.....
Wasiun A. Khan answered 2019-05-26T09:52:34Z
最后
以上就是坦率铃铛为你收集整理的android listview 被选中,java - Android ListView选中的项目保持突出显示的全部内容,希望文章能够帮你解决android listview 被选中,java - Android ListView选中的项目保持突出显示所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复