在SimpleAdapter中复制Android中的一行项目单击配置

在SimpleAdapter中复制Android中的一行项目单击配置,android,Android,我正在使用SimpleAdapter用项目填充列表视图。每一行代表多个按钮,当用户单击行中的一个按钮时,必须隐藏或显示同一行的其他按钮或更改相同的按钮颜色。但我是在列表视图复制我的点击后滚动列表的,例如,如果我点击位置2并更改按钮颜色并启用相同位置的其他按钮,然后向上或向下滚动列表到n位置(n=显示中显示的行数),我已经看到在n+1中出现相同的事件。 请帮忙,我想我必须扩展SimpleAdapter并重写getView()方法,但现在不行 public class MyAdapter exten

我正在使用SimpleAdapter用项目填充列表视图。每一行代表多个按钮,当用户单击行中的一个按钮时,必须隐藏或显示同一行的其他按钮或更改相同的按钮颜色。但我是在列表视图复制我的点击后滚动列表的,例如,如果我点击位置2并更改按钮颜色并启用相同位置的其他按钮,然后向上或向下滚动列表到n位置(n=显示中显示的行数),我已经看到在n+1中出现相同的事件。 请帮忙,我想我必须扩展SimpleAdapter并重写getView()方法,但现在不行

public class MyAdapter extends SimpleAdapter{

    private final LayoutInflater mLayoutInflater;
    private Context context;
    int my_layout;
    ArrayList<Map<String, Object>> map;

    public MyAdapter(Context context, ArrayList<Map<String, Object>> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        this.my_layout = resource;
        this.context = context;
        map = data;         
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        final View row = super.getView(position, convertView, parent);
        final LinearLayout view;
        final Button btnConnect;
        Button b1;
        Button b2;
        ImageView img;

        if (null == convertView) {
            view = (LinearLayout) LinearLayout.inflate(this.context, 
                R.layout.list_item_meeting, null);
            convertView = view;                         
        } else {
            view = (LinearLayout) convertView;             
        }   

            btnConnect = (Button)view.findViewById(R.id.btnJoinMeeting);                
    b1 = (Button)view.findViewById(R.id.btnRemove);
        b2 = (Button)view.findViewById(R.id.btnUpdate);
        img = (ImageView)view.findViewById(R.id.imgConnetionStatus);    


            btnConnect.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    //RelativeLayout parent = ((RelativeLayout)btnConnect.getParent());
                    Button b1 = (Button)view.findViewById(R.id.btnRemove);
                    Button b2 = (Button)view.findViewById(R.id.btnUpdate);
                    ImageView img = (ImageView)view.findViewById(R.id.imgConnetionStatus);

                    if((btnConnect.getText().toString()).equals("Join meeting")){
                        btnConnect.setBackgroundColor(Color.parseColor("#bd0000"));                     
                        btnConnect.setText("Leave meeting");
                        b1.setVisibility(View.VISIBLE);
                        b2.setVisibility(View.VISIBLE);
                        img.setVisibility(View.VISIBLE);
                    }else{
                        btnConnect.setBackgroundColor(Color.parseColor("#adc627"));
                        btnConnect.setText("Join meeting");
                        b1.setVisibility(View.INVISIBLE);
                        b2.setVisibility(View.INVISIBLE);
                        img.setVisibility(View.INVISIBLE);
                    }                               
                }
            });

            return convertView;
    }
公共类MyAdapter扩展了SimpleAdapter{
私人最终布局平面图mLayoutInflater;
私人语境;
int我的_布局;
阵列列表图;
公共MyAdapter(上下文上下文、ArrayList数据、int资源、字符串[]从、int[]到){
超级(上下文、数据、资源、从、到);
this.my_layout=资源;
this.context=上下文;
地图=数据;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终视图行=super.getView(位置、转换视图、父级);
最终线性布局视图;
最终按钮BTN连接;
按钮b1;
按钮b2;
图像视图img;
if(null==convertView){
视图=(LinearLayout)LinearLayout.inflate(this.context,
R.layout.list\u item\u meeting,空);
转换视图=视图;
}否则{
视图=(线性布局)转换视图;
}   
btnConnect=(按钮)view.findViewById(R.id.btnJoinMeeting);
b1=(按钮)view.findViewById(R.id.btnRemove);
b2=(按钮)view.findViewById(R.id.btnUpdate);
img=(ImageView)view.findViewById(R.id.imgConnectionStatus);
btnConnect.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//RelativeLayout parent=((RelativeLayout)btnConnect.getParent());
按钮b1=(按钮)视图.findViewById(R.id.btnRemove);
按钮b2=(按钮)视图.findViewById(R.id.btnUpdate);
ImageView img=(ImageView)view.findViewById(R.id.imgConnectionStatus);
if((btnConnect.getText().toString()).equals(“加入会议”)){
btnConnect.setBackgroundColor(Color.parseColor(#bd0000”);
btnConnect.setText(“离开会议”);
b1.设置可见性(View.VISIBLE);
b2.设置可见性(View.VISIBLE);
img.setVisibility(视图可见);
}否则{
btnConnect.setBackgroundColor(Color.parseColor(“#adc627”));
btnConnect.setText(“加入会议”);
b1.设置可见性(视图不可见);
b2.设置可见性(视图不可见);
img.setVisibility(视图不可见);
}                               
}
});
返回视图;
}

你知道你在做什么吗?你在if和else中都放了很多代码。它的需要是什么?最好把那些代码放在if-else部分之外。把这些乱七八糟的东西清理干净,这样只有人们才能理解你的代码。。。。 还有一件事,为什么一次又一次地找到同一个视图?最好将变量保持为全局变量,并将其赋值一次

顺便说一下…下面是我如何设置适配器的

public View getView(int position, View convertView, ViewGroup parent) {

        Context context = parent.getContext();
        View v = convertView;

        if (v == null) {
           v = LayoutInflater.from(context).inflate(R.layout.item_songs, parent, false);

        }
        SongDetails sng = _data.get(position);
        TextView SongView = (TextView)v.findViewById(R.id.Song);
        TextView TimeView = (TextView)v.findViewById(R.id.Time);
        TextView ArtistView = (TextView)v.findViewById(R.id.Artist);
        SongView.setText(sng.getSong());
       TimeView.setText(sng.getTime()); 
        ArtistView.setText(sng.getArtist());
         return v;
    }

您必须为每一行设置id,并将其保存在一个数组中,如integer,当您单击一行时,必须更改该行的值,并且在设置颜色和任何内容时,必须检查该行的值,如果为0,则设置默认值,如果为1,则需要:
我的想法是创建int[],长度等于列表的大小,

我不需要为项目字段设置简单的值,您阅读的内容,我可以在活页夹中执行相同的操作,但我想设置click listener e.t.。我是在SimpleAdapter的数据(ArrayList)中设置按钮单击设置的。