Android 当用户单击ListView中的某个项目时,如何设置和保存该项目的背景色?

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

我想在用户单击listview时更改它的一些项目背景颜色。此外,我想将其保存在共享首选项中。我正在为ListView使用适配器。我该怎么办

我的CategoryAdapter类:

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循环来检索和显示这些项目背景?