两个listview联动并改变左侧listview内item的背景颜色
时间: 2024-04-30 22:21:10 浏览: 8
实现两个ListView联动的方法有很多种,这里介绍一种比较常用的方法。
1. 在左侧ListView的适配器中,添加一个变量用于保存当前选中的位置(默认为-1),并提供一个方法用于设置选中位置并刷新列表。
2. 在左侧ListView的item布局中添加一个Selector,用于设置选中和未选中状态下的背景色。
3. 在左侧ListView的OnItemClickListener中,调用上述方法设置选中位置,并调用notifyDataSetChanged()刷新列表。
4. 在右侧ListView的适配器中,重写getView()方法,判断当前位置是否为左侧ListView选中位置,如果是则设置背景色。
示例代码如下:
```java
// 左侧ListView的适配器
public class LeftAdapter extends BaseAdapter {
private List<String> mData;
private int mSelectedPosition = -1;
public void setSelectedPosition(int position){
mSelectedPosition = position;
notifyDataSetChanged();
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.left_item_layout, parent, false);
}
TextView textView = convertView.findViewById(R.id.text_view);
textView.setText(mData.get(position));
if(position == mSelectedPosition){
convertView.setBackgroundResource(R.drawable.left_item_selected_bg);
}else{
convertView.setBackgroundResource(R.drawable.left_item_normal_bg);
}
return convertView;
}
}
// 右侧ListView的适配器
public class RightAdapter extends BaseAdapter {
private List<String> mData;
private int mSelectedPosition = -1;
public void setData(List<String> data) {
mData = data;
notifyDataSetChanged();
}
@Override
public int getCount() {
return mData == null ? 0 : mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.right_item_layout, parent, false);
}
TextView textView = convertView.findViewById(R.id.text_view);
textView.setText(mData.get(position));
if(position == mSelectedPosition){
convertView.setBackgroundResource(R.drawable.right_item_selected_bg);
}else{
convertView.setBackgroundResource(R.drawable.right_item_normal_bg);
}
return convertView;
}
public void setSelectedPosition(int position){
mSelectedPosition = position;
notifyDataSetChanged();
}
}
// 在Activity中使用
public class MainActivity extends AppCompatActivity {
private ListView mLeftListView;
private ListView mRightListView;
private LeftAdapter mLeftAdapter;
private RightAdapter mRightAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLeftListView = findViewById(R.id.left_list_view);
mRightListView = findViewById(R.id.right_list_view);
mLeftAdapter = new LeftAdapter();
mLeftAdapter.setData(Arrays.asList("A", "B", "C", "D", "E"));
mLeftListView.setAdapter(mLeftAdapter);
mRightAdapter = new RightAdapter();
mRightListView.setAdapter(mRightAdapter);
mLeftListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mLeftAdapter.setSelectedPosition(position);
mRightAdapter.setSelectedPosition(position);
}
});
}
}
```
其中,left_item_selected_bg和right_item_selected_bg是选中状态下的背景色,left_item_normal_bg和right_item_normal_bg是未选中状态下的背景色。可以自行定义和修改。