android - 在 ListView 的选定项目中显示复选标记

标签 android listview getview

我正在尝试创建一个语言选择屏幕。我有一个 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;
                }
            });
        }
    }

最佳答案

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


第 1 步:

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

boolean isChecked = false;

int selectedItemPosition = -1;


第 2 步:

将此添加到onItemClick()

selectedItemPosition = ((selectedItemPosition!=position)?position:-1);
notifyDataSetChanged();


第 3 步:

将其添加到您的getView()

image_tick.setVisibility((selectedItemPosition=position)?View.VISIBLE:View.GONE);


一些提示:

  • 使用ListViews时,follow view holder pattern优化性能。
  • 使用convertView来回收 View 。
  • 您可以将 XML 中的 image_tick.setImageResource(R.drawable.ic_checked); 替换为 android:src="R.drawable.ic_checked"

关于android - 在 ListView 的选定项目中显示复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52018005/

相关文章:

android - 在 ConstraintLayout 中自动调整多行 TextView

c# - Gtk.ListStore 中的虚拟模式?

Android ListView - 项目之间的细线

c# - 带有滚动背景图像的 ListView

android - 如何将 AsyncTask 与 ListView 适配器一起使用

android - 如何连续运行 onLongClick 事件?

android - 从 Windows 读取 android 短信中的消息

java - 当我在 getView() 中将某些项目设置为 view.invisible 时,其他项目不会出现

android - 如何在应用程序访问联系人应用程序时收到通知