如何更改android中所选列表项的背景

如何更改android中所选列表项的背景,android,android-listview,Android,Android Listview,可能重复: 在设置屏幕的android平板电脑中,列表项的背景会发生变化,直到用户做出下一个选择,这是让该功能正常工作的标准方式。到目前为止,我对选中的项目使用了布尔值,每次单击后我都会刷新列表以反映更改,我不这么认为,这是正确的方法?您可以使用以下过程。它很好用。 You can use the following process . It works fine. Write a Global bean that get the postion of the selected ite

可能重复:

在设置屏幕的android平板电脑中,列表项的背景会发生变化,直到用户做出下一个选择,这是让该功能正常工作的标准方式。到目前为止,我对选中的项目使用了布尔值,每次单击后我都会刷新列表以反映更改,我不这么认为,这是正确的方法?

您可以使用以下过程。它很好用。
You can use the following process . It works fine.

   Write a Global bean that get the postion of the selected item from the list.

     public class Global {      
        public static int mListPosition = 0; 

        public static int getListPosition() {
                return mListPosition;
            }    
        public static void setListPosition(int mListPosition) {
                Global.mListPosition = mListPosition;
            }   

        }

from List onClickListener set the position into the global bean


mList.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                Global.setListPosition(arg2);
mAdapter.notifyDataSetChanged();
}
        });



in the adapter 

    @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) mCtx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.details_retailer_list_row, null);

                mHolder = new ViewHolder();
                v.setTag(mHolder);

                mHolder.mDetailsRetailerLayout = (LinearLayout) v.findViewById(R.id.details_cart_retailer_row_layout);
                mHolder.mDetailsRetailer = (TextView) v.findViewById(R.id.detailsRetailerRow);

            }
            else {
                mHolder =  (ViewHolder) v.getTag();
            }           


            final CartDetailsRetailerBean mDetailsRetailerBean = mItems.get(position);
            if (position == Global.getListPosition()) {
                mHolder.mDetailsRetailerLayout
                        .setBackgroundResource(R.drawable.row_white);
            } else {
                mHolder.mDetailsRetailerLayout
                        .setBackgroundResource(R.drawable.row_red);
            }

            if(mDetailsRetailerBean != null){

                Log.i("Global Position", ""+Global.getListPosition());



                mHolder.mDetailsRetailer.setText(mDetailsRetailerBean.getRetailerName());

            }

            return v;
        }

        class ViewHolder {
            public LinearLayout mDetailsRetailerLayout;
            public TextView mDetailsRetailer;

        }


Please apply it . I think it will work fine.
编写一个全局bean,从列表中获取所选项目的位置。 公共类全局{ 公共静态int mListPosition=0; 公共静态int getListPosition(){ 返回位置; } 公共静态无效setListPosition(int-mListPosition){ Global.mListPosition=mListPosition; } } 从列表onClickListener将位置设置为全局bean mList.setOnItemClickListener(新的OnItemClickListener(){ 公共链接(AdapterView arg0、视图arg1、内部arg2、, 长arg3){ Global.setListPosition(arg2); mAdapter.notifyDataSetChanged(); } }); 在适配器中 @凌驾 公共视图getView(int位置、视图转换视图、视图组父视图){ 视图v=转换视图; 如果(v==null){ LayoutInflater vi=(LayoutInflater)mCtx.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE); v=vi.充气(R.布局.详细信息\零售商\列表\行,空); mHolder=新的ViewHolder(); v、 setTag(mHolder); mHolder.mdetailsretaillayout=(LinearLayout)v.findViewById(R.id.details\u cart\u retailer\u row\u布局); mHolder.mDetailsRetailer=(TextView)v.findViewById(R.id.detailsRetailerRow); } 否则{ mHolder=(ViewHolder)v.getTag(); } 最终CartDetailsRetailerBean mDetailsRetailerBean=mItems.get(位置); if(position==Global.getListPosition()){ mHolder.mdetailsretaillayout .setBackgroundResource(R.drawable.row_white); }否则{ mHolder.mdetailsretaillayout .setBackgroundResource(R.drawable.row_red); } if(mDetailsRetailerBean!=null){ Log.i(“全局位置”,“Global.getListPosition()); mHolder.mDetailsRetailer.setText(mdetailsretailrbean.getRetailerName()); } 返回v; } 类视图持有者{ 公共线路布局MDetailsRetailLayout; 公共文本视图mDetailsRetailer; } 请使用它。我想它会很好用的。
您可以使用以下过程。它很好用。
编写一个全局bean,从列表中获取所选项目的位置。
公共类全局{
公共静态int mListPosition=0;
公共静态int getListPosition(){
返回位置;
}    
公共静态无效setListPosition(int-mListPosition){
Global.mListPosition=mListPosition;
}   
}
从列表onClickListener将位置设置为全局bean
mList.setOnItemClickListener(新的OnItemClickListener(){
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
Global.setListPosition(arg2);
mAdapter.notifyDataSetChanged();
}
});
在适配器中
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
如果(v==null){
LayoutInflater vi=(LayoutInflater)mCtx.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
v=vi.充气(R.布局.详细信息\零售商\列表\行,空);
mHolder=新的ViewHolder();
v、 setTag(mHolder);
mHolder.mdetailsretaillayout=(LinearLayout)v.findViewById(R.id.details\u cart\u retailer\u row\u布局);
mHolder.mDetailsRetailer=(TextView)v.findViewById(R.id.detailsRetailerRow);
}
否则{
mHolder=(ViewHolder)v.getTag();
}           
最终CartDetailsRetailerBean mDetailsRetailerBean=mItems.get(位置);
if(position==Global.getListPosition()){
mHolder.mdetailsretaillayout
.setBackgroundResource(R.drawable.row_white);
}否则{
mHolder.mdetailsretaillayout
.setBackgroundResource(R.drawable.row_red);
}
if(mDetailsRetailerBean!=null){
Log.i(“全局位置”,“Global.getListPosition());
mHolder.mDetailsRetailer.setText(mdetailsretailrbean.getRetailerName());
}
返回v;
}
类视图持有者{
公共线路布局MDetailsRetailLayout;
公共文本视图mDetailsRetailer;
}
请使用它。我想它会很好用的。

答案似乎是合适的,它是列表的正常选择器,一旦用户选择,背景会改变为按钮,我想要一个复选框,你是否明白我想说的是。您需要使用单选列表视图类型和选择器。请勾选此链接。这可能有助于答案似乎是合适的,这是列表的正常选择器,一旦用户选择,背景将更改为按钮,我想要一个类似于复选框的东西,您是否明白我想说的是。您需要使用单选列表视图类型和选择器。请选中此链接,它可能会有所帮助,谢谢。。即使是简单的事情有时也比