Android 在ListView的选定项中显示复选标记

Android 在ListView的选定项中显示复选标记,android,listview,getview,Android,Listview,Getview,我正在尝试创建一个语言选择屏幕。我有一个ListView,我正在使用自定义适配器类。选择项目后,我想在项目中显示一个勾号。我的ListView有一个TextView`和一个ImageView。如何实现 这是我已经尝试过的 任何答案和建议都将不胜感激,提前感谢 public class customAdapter extends BaseAdapter { String[] languages ; Context mContext; boolean

我正在尝试创建一个语言选择屏幕。我有一个ListView,我正在使用自定义适配器类。选择项目后,我想在项目中显示一个勾号。我的ListView有一个TextView`和一个ImageView。如何实现

这是我已经尝试过的

任何答案和建议都将不胜感激,提前感谢

public class customAdapter extends BaseAdapter {
        String[] languages ;
        Context mContext;
        boolean isChecked = false;
    
        public customAdapter(String[] languages, Context  
        mContext){
            this.languages = languages;
            this.mContext = mContext;
        }
    
        @Override
        public int getCount() {
            return languages.length;
        }
    
        @Override
        public Object getItem(int position) {
            return null;
        }
    
        @Override
        public long getItemId(int position) {
            return 0;
        }
    
        @Override
        public View getView(int position, View convertView,              
            ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater)                  
            mContext.getSystemService(
            Context.LAYOUT_INFLATER_SERVICE);
            View rowView=                                               
            inflater.inflate(
            R.layout.content_lang_list,parent,false);
    
            TextView lang_text = (TextView)                                    
            rowView.findViewById(R.id.text_select_lang);
            final ImageView image_tick = (ImageView)                    
            rowView.findViewById(R.id.image_tick);
    
            lang_text.setText(languages[position]);
            image_tick.setImageResource(R.drawable.ic_checked);
    
            return rowView;
    
        }




    public class ChangeLang extends AppCompatActivity {
    
        private ListView languageList;
        String[] languages = {"English","Portuguese","Arabic"};
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_cahnge_lang);
    
            languageList = (ListView)
            findViewById(R.id.language_list);
            final customAdapter mAdapter = new customAdapter(
            languages,this);
            languageList.setAdapter(mAdapter);
    
            languageList.setOnItemClickListener(
            new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent,
            View view, int position, long id) {
                    String selected = ((TextView)
            view.findViewById(R.id.text_select_lang))
                    .getText().toString();
                    Object itemObject =parent.getAdapter()
                    .getItem(position);
                    LanguageSelect selectedLang =                          
                    (LanguageSelect)itemObject;
                }
            });
        }
    }
公共类customAdapter扩展了BaseAdapter{
字符串[]语言;
语境;
布尔值isChecked=false;
公共customAdapter(字符串[]语言,上下文
mContext){
这个。语言=语言;
this.mContext=mContext;
}
@凌驾
public int getCount(){
返回语言。长度;
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置,视图转换视图,
视图组(父级){
LayoutInflater充气机=(LayoutInflater)
mContext.getSystemService(
上下文。布局(充气机和服务);
视图行视图=
充气(
R.layout.content\u lang\u list,parent,false);
TextView lang_text=(TextView)
rowView.findViewById(R.id.text\u select\u lang);
最终图像视图图像_勾选=(图像视图)
rowView.findviewbyd(R.id.image\u勾选);
lang_text.setText(语言[位置]);
图像勾选setImageResource(R.drawable.ic勾选);
返回行视图;
}
公共类ChangeLang扩展AppCompative活动{
私有ListView语言列表;
字符串[]语言={“英语”、“葡萄牙语”、“阿拉伯语”};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u cahnge\u lang);
languageList=(ListView)
findViewById(R.id.language_列表);
最终customAdapter mAdapter=新customAdapter(
语言,这个);
setAdapter(mAdapter);
languageList.setOnItemClickListener(
新的AdapterView.OnItemClickListener(){
@凌驾
公共无效MClick(AdapterView父级、,
视图、整型位置、长id){
所选字符串=((文本视图)
view.findViewById(R.id.text\u select\u lang))
.getText().toString();
Object itemObject=parent.getAdapter()
.getItem(职位);
语言选择所选语言=
(LanguageSelect)itemObject;
}
});
}
}
在单击的图像项目中使用
设置可见性(View.VISIBLE);
,即:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView=  inflater.inflate(R.layout.content_lang_list,parent,false);

    TextView lang_text = (TextView) rowView.findViewById(R.id.text_select_lang);
    final ImageView image_tick = (ImageView) rowView.findViewById(R.id.image_tick);

    lang_text.setText(languages[position]);
    image_tick.setImageResource(R.drawable.ic_checked);
    image_tick.setVisibility(View.VISIBLE); //Show image
    return rowView;

}

作为语言选择屏幕,我假设您一次只需要选择一个项目。您已经添加了一个布尔成员
isChecked;
,但似乎没有在任何地方使用


步骤1: 这里需要的是一个int成员,例如,
selectedItemPosition
,其初始值设置为-1。
换句话说,替换为

boolean isChecked = false;


步骤2: 将此添加到
onItemClick()


步骤3: 将此添加到您的
getView()


几点提示:
  • 在使用
    列表视图时
    ,以优化性能
  • 使用
    convertView
    s回收视图
  • 您可以用XML中的android:src=“R.drawable.ic_checked”替换
    image\u tick.setImageResource(R.drawable.ic_checked);

滚动时,它将消失。哪种问题?您可以发布您的
xml
来查看它吗?当我单击列表项时,我想显示勾号图像这是怎么回事?languageList.setOnItemClickListener(new AdapterView.OnItemClickListener(){@Override public void onItemClick(AdapterView父对象,视图视图,int位置,长id){String selected=((TextView)视图.findViewById(R.id.text\u select\u lang)).getText().toString();Object itemObject=parent.getAdapter().getItem(位置);LanguageSelect selectedLang=(LanguageSelect)itemObject;});抱歉,我不明白。步骤2 onItemClick我不明白,我在哪里使用主活动或适配器类。在主活动中,我指的是
onItemClick()
方法
AdapterView.OnItemClickListener
。您已经在
OnCreate()
int isChecked=-1;image\u tick.setVisibility>中设置了它((selectedItemPosition=position)?View.VISIBLE:View.GONE);当我设置此选项时,显示不兼容的类型。必需的布尔值,找到int
int selectedItemPosition = -1;
selectedItemPosition = ((selectedItemPosition!=position)?position:-1);
notifyDataSetChanged();
image_tick.setVisibility((selectedItemPosition=position)?View.VISIBLE:View.GONE);