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