我有两个ListView。它们都使用相同的适配器。我想从这两个列表中选择互斥的项目。对于列表视图中的每个项目,我都有布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/type_of_support"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_marginLeft="@dimen/left_screen_margin"
android:textSize="@dimen/type_of_support_font_size"/>
<ImageView android:id="@+id/img_checked_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="30dp"
android:src="@drawable/ic_check"
android:visibility="invisible"/>
</RelativeLayout>
选择项目时,我会看到图像。
我不知道如何从listview获取最后选择的视图以及如何从其他列表视图中通过id获取选定的视图。
我阅读了ListView,Adapter,AdapterView的文档,但找不到解决方案
final TypeOfSupportAdapter quoteToCashAdapter = new TypeOfSupportAdapter(SelectionTypeOfSupport.this, R.layout.lv_type_of_support, quoteToCashEngagementsList);
final TypeOfSupportAdapter pointRequestsAdapter = new TypeOfSupportAdapter(SelectionTypeOfSupport.this, R.layout.lv_type_of_support, pointRequestsList);
final ListView quoteToCashListView = (ListView) findViewById(R.id.quote_to_cash_list);
quoteToCashListView.setAdapter(quoteToCashAdapter);
quoteToCashListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (countCheckedTypeOfSupport == 0 && positionCurItemInQuoteToCashList < 0) {
ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type);
checkTypeOfSupportImageView.setVisibility(View.VISIBLE);
countCheckedTypeOfSupport++;
} else if (countCheckedTypeOfSupport == 1 && positionCurItemInQuoteToCashList >= 0) {
if (position != positionCurItemInQuoteToCashList) {
ImageView previouslyCheckedImage = (ImageView) view.findViewById(R.id.img_checked_type); //get previous view
previouslyCheckedImage.setVisibility(View.INVISIBLE);
ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type);
checkTypeOfSupportImageView.setVisibility(View.VISIBLE);
} else {
countCheckedTypeOfSupport = 0;
positionCurItemInQuoteToCashList = -1;
ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type);
checkTypeOfSupportImageView.setVisibility(View.INVISIBLE);
}
} else {
ImageView previouslyCheckedImage = (ImageView) pointRequestsAdapter.getView(positionCurItemInQuoteToCashList, null, null).findViewById(R.id.img_checked_type); //getView from other listview
previouslyCheckedImage.setVisibility(View.INVISIBLE);
ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type);
checkTypeOfSupportImageView.setVisibility(View.VISIBLE);
positionCurItemInQuoteToCashList = -1;
}
positionCurItemInQuoteToCashList = position;
Log.i(TAG, "1. countCheckedTypeOfSupport " + countCheckedTypeOfSupport + " positionCurItemInQuoteToCashList " + positionCurItemInQuoteToCashList + " positionCurItemInPointRequestList" + positionCurItemInPointRequestList);
}
});
ListView pointRequestsListView = (ListView) findViewById(R.id.point_requests_list);
pointRequestsListView.setAdapter(pointRequestsAdapter);
pointRequestsListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (countCheckedTypeOfSupport == 0 && positionCurItemInPointRequestList < 0) {
ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type);
checkTypeOfSupportImageView.setVisibility(View.VISIBLE);
countCheckedTypeOfSupport++;
} else if (countCheckedTypeOfSupport == 1 && positionCurItemInPointRequestList >= 0) {
if (position != positionCurItemInPointRequestList) {
ImageView previouslyCheckedImage = (ImageView) view.findViewById(R.id.img_checked_type); // get previous view
previouslyCheckedImage.setVisibility(View.INVISIBLE);
ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type);
checkTypeOfSupportImageView.setVisibility(View.VISIBLE);
} else {
countCheckedTypeOfSupport = 0;
positionCurItemInQuoteToCashList = -1;
ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type);
checkTypeOfSupportImageView.setVisibility(View.INVISIBLE);
}
} else {
ImageView previouslyCheckedImage = (ImageView) quoteToCashAdapter.getView(positionCurItemInPointRequestList, null, null).findViewById(R.id.img_checked_type); //getView from other listview
previouslyCheckedImage.setVisibility(View.INVISIBLE);
ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type);
checkTypeOfSupportImageView.setVisibility(View.VISIBLE);
positionCurItemInQuoteToCashList = -1;
}
positionCurItemInPointRequestList = position;
Log.i(TAG, "1. countCheckedTypeOfSupport " + countCheckedTypeOfSupport + " positionCurItemInQuoteToCashList " + positionCurItemInQuoteToCashList + " positionCurItemInPointRequestList" + positionCurItemInPointRequestList);
}
});
有人可以帮我解决这个问题吗?
//修订版
private class TypeOfSupportAdapter extends ArrayAdapter<String> {
private Context context;
private List<String> typeOfSupportList;
private int resourceId;
public TypeOfSupportAdapter(Context context, int resource, List<String> objects) {
super(context, resource, objects);
this.context = context;
this.resourceId = resource;
this.typeOfSupportList = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
View rowView = layoutInflater.inflate(resourceId, parent, false);
String curTypeOfSupport = typeOfSupportList.get(position);
TextView typeOfSupport = (TextView) rowView.findViewById(R.id.type_of_support);
typeOfSupport.setText(curTypeOfSupport);
return rowView;
}
}
答案 0 :(得分:1)
您应该在您的适配器中实现您的选择逻辑,只需传输一个标志以检测您从哪个列表中选择该项目。你能展示你的适配器代码,你在pointRequestsList中添加了什么? 创建类
class YourItemClass
{
public boolean selected;
//...
}
现在为每个listView创建两个列表:
ArrayList<YourItemClass> list1 = new ArrayList<YourItemClass>();
ArrayList<YourItemClass> list2 = new ArrayList<YourItemClass>();
将此列表传输到适配器,例如列表#1:
final TypeOfSupportAdapter pointRequestsAdapter = new TypeOfSupportAdapter(SelectionTypeOfSupport.this, R.layout.lv_type_of_support, list1);
final ListView quoteToCashListView = (ListView) findViewById(R.id.quote_to_cash_list);
quoteToCashListView.setAdapter(quoteToCashAdapter);
quoteToCashListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
list1.get(position).selected = !list1.get(position).selected;
quoteToCashAdapter.notifyDataSetChanged();
}
使用list2
为另一个listView做同样的事情现在在你的适配器中使用它,例如
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
row = inflater.inflate(mResourse, parent, false);
final ImageView image = (ImageView) row.findViewById(R.id.yourImage);
if(transferedList.get(position).selected)
image.setVisibility(View.VISIBLE);
else
image.setVisibility(View.INVISIBLE);
}
现在你有两个带有挑选物品的清单(如果是list1.get(位置),则选择。选择== true)
如果您有任何疑问 - 请问 抱歉我的英语不好:)
答案 1 :(得分:0)
我解决了我的问题。这是我的代码
private List<TypeOfSupport> quoteToCashEngagementsList;
private List<TypeOfSupport> pointRequestsList;
private int positionCurItemInQuoteToCashList = -1;
private int positionCurItemInPointRequestList = -1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.select_type_of_support);
Resources resources = getResources();
initQuoteToCashEngagements(resources);
initPointRequests(resources);
final TypeOfSupportAdapter quoteToCashAdapter = new TypeOfSupportAdapter(SelectionTypeOfSupport.this, R.layout.lv_type_of_support, quoteToCashEngagementsList);
final TypeOfSupportAdapter pointRequestsAdapter = new TypeOfSupportAdapter(SelectionTypeOfSupport.this, R.layout.lv_type_of_support, pointRequestsList);
final ListView quoteToCashListView = (ListView) findViewById(R.id.quote_to_cash_list);
quoteToCashListView.setAdapter(quoteToCashAdapter);
quoteToCashListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if(positionCurItemInQuoteToCashList != -1){
quoteToCashEngagementsList.get(positionCurItemInQuoteToCashList).setChecked(false);
}
if(positionCurItemInPointRequestList != -1){
pointRequestsList.get(positionCurItemInPointRequestList).setChecked(false);
pointRequestsAdapter.notifyDataSetChanged();
}
quoteToCashEngagementsList.get(position).setChecked(true);
positionCurItemInQuoteToCashList = position;
quoteToCashAdapter.notifyDataSetChanged();
positionCurItemInPointRequestList = -1;
}
});
ListView pointRequestsListView = (ListView) findViewById(R.id.point_requests_list);
pointRequestsListView.setAdapter(pointRequestsAdapter);
pointRequestsListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if(positionCurItemInPointRequestList != -1){
pointRequestsList.get(positionCurItemInPointRequestList).setChecked(false);
}
if(positionCurItemInQuoteToCashList != -1){
quoteToCashEngagementsList.get(positionCurItemInQuoteToCashList).setChecked(false);
quoteToCashAdapter.notifyDataSetChanged();
}
pointRequestsList.get(position).setChecked(true);
positionCurItemInPointRequestList = position;
pointRequestsAdapter.notifyDataSetChanged();
positionCurItemInQuoteToCashList = -1;
}
});
}
private class TypeOfSupportAdapter extends ArrayAdapter<TypeOfSupport> {
private Context context;
private List<TypeOfSupport> typeOfSupportList;
private int resourceId;
public TypeOfSupportAdapter(Context context, int resource, List<TypeOfSupport> objects) {
super(context, resource, objects);
this.context = context;
this.resourceId = resource;
this.typeOfSupportList = objects;
}
@Override
public TypeOfSupport getItem(int position) {
return typeOfSupportList.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
View rowView = layoutInflater.inflate(resourceId, parent, false);
TypeOfSupport curTypeOfSupport = typeOfSupportList.get(position);
TextView typeOfSupport = (TextView) rowView.findViewById(R.id.type_of_support);
typeOfSupport.setText(curTypeOfSupport.getTypeOfSupport());
ImageView checkImage = (ImageView) rowView.findViewById(R.id.img_checked_type);
if(curTypeOfSupport.isChecked()){
checkImage.setVisibility(View.VISIBLE);
} else {
checkImage.setVisibility(View.INVISIBLE);
}
return rowView;
}
}