繁体   English   中英

Android OnClick在ListView中的ImageButton,如何获取Imagebutton的位置以及如何将选定的Imagebutton更改为其他Imagebutton

[英]Android OnClick of ImageButton in ListView, how to get the position of Imagebutton and change the selected Imagebutton to a different Imagebutton

要求:单击ListViewImageButton将显示一个弹出窗口。 基于弹出窗口选择,将ListviewImageButton更改为其他ImageButton

问题是,当我单击另一个ImageButton时,只有最后一个ImageButton被更改。 问题是没有考虑ImageButtonListView中的位置。

如何通过获取所选ImageButton的位置来更改所选ImageButton

这是代码:

public class FavouritesCellAdapter extends ArrayAdapter<String>  {
    private int layout;
    private List<String> mObjects;
    private RelativeLayout mRelativeLayout;
    final ViewHolder viewHolder = new ViewHolder();

    public FavouritesCellAdapter(Context context, int resource, List<String> objects) {
        super(context, resource, objects);
        mObjects = objects;
        layout = resource;

    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder mainViewHolder = null;
        if(convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(layout, parent, false);
mRelativeLayout = (RelativeLayout) convertView.findViewById(R.id.favorites_listview_small);
            viewHolder.title = (TextView) convertView.findViewById(R.id.text1);


            viewHolder.button = (ImageButton) convertView.findViewById(R.id.subscribe);

            viewHolder.button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    showPopupDialog( viewHolder);
                    Log.v("Message", viewHolder.button + " was selected");

                }
            });



            viewHolder.title.setText(getItem(position));

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



        return convertView;
    }




    public class ViewHolder {


        TextView title;
        ImageButton button;
        Button ok_button;
        Button cancel_button;
        CheckBox escalatedChkBx;
        CheckBox priorityChkBx;
    }




    private void showPopupDialog(final ViewHolder viewHolder){

        try{


            LayoutInflater li = LayoutInflater.from(getContext());
            final View prompt = li.inflate(R.layout.popup_dialog, null);
            final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
            viewHolder.ok_button  = (Button)prompt.findViewById(R.id.ok_button);
            viewHolder.cancel_button = (Button)prompt.findViewById(R.id.cancel_button);

            viewHolder.escalatedChkBx = ( CheckBox ) prompt.findViewById( R.id.checkBox );
            viewHolder.priorityChkBx  = ( CheckBox ) prompt.findViewById( R.id.checkBox2 );


            alertDialogBuilder.setView(prompt);


            final AlertDialog show = alertDialogBuilder.show();




                viewHolder.ok_button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {


                    if (viewHolder.escalatedChkBx.isChecked() && viewHolder.priorityChkBx.isChecked()) {


                        viewHolder.button.setImageResource(R.drawable.ic_email_inactive);
                        show.dismiss();

                    }


                    }
                });

            viewHolder.cancel_button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    show.dismiss();
                       }



                });

             alertDialogBuilder.show();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

如果此条件成功,是否必须在此处传递ImageButton的位置才能设置其他ImageButton

if (viewHolder.escalatedChkBx.isChecked() && viewHolder.priorityChkBx.isChecked()) {

                            **viewHolder.button.setImageResource(R.drawable.ic_email_inactive);**
                            show.dismiss();

                        }

当我单击另一个时,只有最后一个ImageButton正在更改。

您必须创建一个像这样的界面:

public interface RecyclerViewOnClick {

    void itemOnClick (View view, int position);
}

然后在您的适配器视窗中

holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mRecyclerViewOnClick.itemOnClick(v, position);
            }
        });

然后在您的活动中实施recyclerviewonclick

@Override
    public void itemOnClick(View view, final int position) {
        //you will got the item clicked position here. 
        //then you can validate to differentiate your image based on position right here 
    }

希望能帮助到你!

将int position属性添加到show popup方法中,并通过在getView中传递的位置获取viewholder

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM