【问题标题】:Get selected radio button position inside listview获取列表视图中选定的单选按钮位置
【发布时间】:2014-01-09 15:39:20
【问题描述】:

我正在尝试对选定的单选按钮使用 settag 以将其位置存储在我的 BaseAdapter 中并从其他类访问它。

我可以选择单选,但我需要在选择单选按钮时获取图像的名称。

这是我的 BaseAdapter GetView:

    public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = l_Inflater.inflate(R.layout.item_details_view, null);
        holder = new ViewHolder();
        holder.txt_itemName = (TextView) convertView.findViewById(R.id.name);
        holder.txt_itemDescription = (TextView) convertView.findViewById(R.id.itemDescription);
        holder.txt_itemPrice = (TextView) convertView.findViewById(R.id.price);
        holder.itemImage = (ImageView) convertView.findViewById(R.id.photo);
        holder.button = (RadioButton)convertView.findViewById(R.id.rbSelectedOption);                                                     

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txt_itemName.setText(itemDetailsrrayList.get(position).getName());
    holder.txt_itemDescription.setText(itemDetailsrrayList.get(position).getItemDescription());
    holder.txt_itemPrice.setText(itemDetailsrrayList.get(position).getPrice());
    holder.itemImage.setImageResource(imgid[itemDetailsrrayList.get(position).getImageNumber() - 1]);

    holder.button.setTag(position);  

    holder.button.setOnClickListener(new View.OnClickListener() {  
                    public void onClick(View v) { 
            if((position != mSelectedPosition && mSelectedRB != null)){
                mSelectedRB.setChecked(false);
            }
            mSelectedPosition = position;
            mSelectedRB = (RadioButton)v;
        }
    });

        if(mSelectedPosition != position){
            holder.button.setChecked(false);
        }else{
            holder.button.setChecked(true);
            if(mSelectedRB != null && holder.button!= mSelectedRB){
                mSelectedRB = holder.button;
            }
        }         
    return convertView;
}

这是我的 ListViewActivity:

ArrayList<ItemDetails> image_details = GetSearchResults();

    final ListView lv1 = (ListView) findViewById(R.id.list);
    lv1.setAdapter(new ItemListBaseAdapter(this, image_details));
    lv1.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

    final RadioButton SelectedOption = (RadioButton) findViewById(R.id.rbSelectedOption);
    lv1.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
            int pos = (Integer) v.getTag();
            Object o = SelectedOption.getTag(pos);
            ItemDetails obj_itemDetails = (ItemDetails)o;
            Toast.makeText(ListViewImagesActivity.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
            CarName =obj_itemDetails.getName();
       }  
    });

我无法使用 getTag 获得位置:

int pos = (Integer) v.getTag();
Object o = SelectedOption.getTag(pos);

谁能告诉我如何从我的 BaseAdapter 类中获取位置到 ListViewActivity ?

【问题讨论】:

    标签: android listview position radio-button


    【解决方案1】:

    试试这样的:

    在你的适配器中声明两个公共字段:

    public int SelectedRBPosition;
    public RadioButton SelectedRB;  
    

    选中时使用它们保存位置和 RadioButton。
    创建两个方法来获取它们;

    public int getSelectedRadioButtonPosition(){
        return SelectedRBPosition;
    }
    
    public RadioButton getSelectedRadioButton(){
        return SelectedRB;
    }
    

    在活动中为适配器声明一个字段:

    private ItemListBaseAdapter adapter = new ItemListBaseAdapter(this, image_details);
    final ListView lv1 = (ListView) findViewById(R.id.list);
    lv1.setAdapter(adapter);
    lv1.setChoiceMode(ListView.CHOICE_MODE_SINGLE);  
    

    当你需要它们时调用 get 方法:

    int pos = adapter.getSelectedRBPosition();
    RadioButton rb = adapter.getSelectedRB();
    

    【讨论】:

    • 很棒的答案...对我有很大帮助...谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2018-09-19
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多