【问题标题】:Show check mark in selected item of ListView在 ListView 的选定项目中显示复选标记
【发布时间】:2021-06-13 18:09:58
【问题描述】:

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

【问题讨论】:

    标签: android listview getview


    【解决方案1】:

    作为语言选择屏幕,我假设您一次只需要选择一项。您已经添加了一个布尔成员 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);
    


    几点提示:

    • 同时使用ListViewsfollow view holder pattern 优化性能。
    • 使用convertViews 回收视图。
    • 您可以在 XML 中将 image_tick.setImageResource(R.drawable.ic_checked); 替换为 android:src="R.drawable.ic_checked"

    【讨论】:

    • 这个怎么样? 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; } });
    • 对不起,我不明白。
    • 第 2 步 onItemClick 我不明白,我在哪里使用主活动或适配器类。在主活动中做什么
    • 我的意思是AdapterView.OnItemClickListeneronItemClick()方法。您已经将其设置在 OnCreate()
    • int isChecked = -1; image_tick.setVisibility((selectedItemPosition=position)?View.VISIBLE:View.GONE);当我设置这个显示不兼容的类型时。必需的布尔值,找到 int
    【解决方案2】:

    在被点击的图片项目中使用setVisibility(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;
    
    }
    

    【讨论】:

    • 滚动时会消失。
    • 哪种麻烦?您可以发布您的xml 来查看它吗?
    • 当我点击列表项时,我想显示刻度图像
    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2010-11-12
    • 2012-01-23
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多