Android 当用户单击ListView中的某个项目时,如何设置和保存该项目的背景色?
我想在用户单击listview时更改它的一些项目背景颜色。此外,我想将其保存在共享首选项中。我正在为ListView使用适配器。我该怎么办 我的CategoryAdapter类:Android 当用户单击ListView中的某个项目时,如何设置和保存该项目的背景色?,android,listview,sharedpreferences,background-color,Android,Listview,Sharedpreferences,Background Color,我想在用户单击listview时更改它的一些项目背景颜色。此外,我想将其保存在共享首选项中。我正在为ListView使用适配器。我该怎么办 我的CategoryAdapter类: public class CategoryAdapter extends ArrayAdapter<Category> { private LayoutInflater mInflater; private int mResource; public CategoryAdapte
public class CategoryAdapter extends ArrayAdapter<Category> {
private LayoutInflater mInflater;
private int mResource;
public CategoryAdapter(Context context, int resource, List<Category> categories) {
super(context,resource,categories);
mResource = resource;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView( int position, View convertView, ViewGroup parent )
{
View view = convertView == null ? mInflater.inflate( mResource, parent, false ) : convertView;
TextView categoryTitle = (TextView) view.findViewById( R.id.name );
Category item = getItem( position );
categoryTitle.setText( item.getCategoryTitle() );
return view;
}
}
公共类CategoryAdapter扩展了ArrayAdapter{
私人停车场;
私人国际资源;
公共类别适配器(上下文、int资源、列表类别){
超级(上下文、资源、类别);
mResource=资源;
mInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图)
{
视图=convertView==null?最小充气器。充气(mResource,parent,false):convertView;
TextView categoryTitle=(TextView)view.findViewById(R.id.name);
类别项目=获取项目(位置);
setText(item.getCategoryTitle());
返回视图;
}
}
我想在哪里使用它:
CategorylistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {
}
});
CategorylistView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共虚空onItemClick(AdapterView AdapterView,视图视图,最终整数i,长l){
}
});
类别列表视图:
CategorylistView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,category){
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
if(catViewPreferences.getInt("scn",0)==position){
textView.setBackgroundColor(Color.BLUE);
}
return textView;
}
});
CategorylistView.setAdapter(新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,category){
@凌驾
公共视图getView(最终整型位置、最终视图转换视图、最终视图组父视图){
if(catViewPreferences.getInt(“scn”,0)=位置){
textView.setBackgroundColor(Color.BLUE);
}
返回文本视图;
}
});
McClick侦听器:
CategorylistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {
final String category = (String) adapterView.getItemAtPosition(i);
final String email = loginPreferences.getString("email","");
final String password = loginPreferences.getString("password", "");
final int position = adapterView.getSelectedItemPosition();
if(i<8) {
view.setBackgroundColor(getResources().getColor(R.color.colorLightBlue));
}
catViewPrefEditor.putInt("scn", position);
catViewPrefEditor.commit();
CategorylistView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共虚空onItemClick(AdapterView AdapterView,视图视图,最终整数i,长l){
最终字符串类别=(字符串)adapterView.getItemAtPosition(i);
final String email=loginPreferences.getString(“email”,“电子邮件”);
final String password=loginPreferences.getString(“password”,“password”);
final int position=adapterView.getSelectedItemPosition();
如果(i使用可绘制的状态列表
在布局文件中,指定一个如下所示的可绘制文件
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@drawable/button_bg_focused"/>
<item android:state_selected="true" android:drawable="@drawable/button_bg_selected"/>
<item android:drawable="@drawable/button_bg_default"/>
</selector>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="22px"/>
<solid android:color="@color/black"/>
</shape>
使用您制作的自定义适配器
CategorylistView.setAdapter(new CategoryAdapter(this,android.R.layout.simple_list_item_1,categories));
您可以通过在onItemClick
方法上更改视图的背景来执行此操作:
public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {
view.setBackgroundColor(Color.BLUE);
}
public void onItemClick(AdapterView AdapterView,View-View,final int i,long l){
视图。setBackgroundColor(颜色。蓝色);
}
更新:
如果要取消选择项,可以如下更改top方法:
public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {
if(((ColorDrawable)view.getBackground()).getColor() == Color.Blue){
//the item is selected...now u must deselect it
view.setBackgroundColor(Color.WHITE);
} else {
view.setBackgroundColor(Color.BLUE);
}
}
public void onItemClick(AdapterView AdapterView,View-View,final int i,long l){
if(((ColorDrawable)view.getBackground()).getColor()==Color.Blue){
//该项目已被选中…现在您必须取消选择它
视图.setBackgroundColor(颜色.白色);
}否则{
视图。setBackgroundColor(颜色。蓝色);
}
}
我希望这对您有所帮助。您想更改您单击的项目的颜色吗?@Mohammad Zarei是的,背景颜色。您尝试过使用可绘制的状态列表作为背景吗?@pantos27,还没有,我该如何处理它?您为什么不使用在CategorylistView.setAdapter中创建的CategoryAdapter类?它工作正常,但我该如何处理保存这些视图,如共享首选项中的字符串?实际上,我想用背景色显示这些项目,当应用程序关闭并再次启动时,用户再次单击背景色。我尝试使用以下命令保存onItemClick:final int position=adapterView.GetSelectEditePosition();如何取消选择?很简单……只需将颜色更改回原来的颜色……并检查当前颜色是否与默认颜色不同……我将更新我的答案以向您演示如何执行此操作。我只想保存这些项目的背景色,它会单击用户。如果应用程序关闭并再次启动。颜色列表将显示在哪里首先是rom?对不起,但我不明白这个问题。给每个按钮一个数字,并把它作为一个整数放在你的共享首选项中,所以我需要做8个首选项,我取整数(从列表视图中的位置)。此外,我需要做8个if循环来检索和显示这些项目背景?