У меня есть два ListView. Оба они используют один и тот же адаптер. Я хочу выбирать элементы, взаимно исключающие из этих двух списков. Для каждого элемента в списке у меня есть макетAndroid ListView получает последний выбранный элемент и получает последний выбранный элемент из другого ListView в onItemClick
<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>
я изображение видимого, когда был выбран пункт.
Я не знаю, как получить последний выбранный вид из списка и как получить выбранный вид по id из другого списка.
Я прочитал документацию для ListView, адаптер, 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;
}
}
Я просто инициализации массива списка в обоих случаях (pointRequestsList & quoteToCashListView) – Ray
Я не понимаю, как я могу получить выбранный элемент в адаптере. – Ray
Просто добавьте поле typeOfSupportList в класс YourItemClass и перенесите его в адаптер, введитеOFSupport.setText (curTypeOfSupport) в адаптер и проверьте выбранный флаг, если это правда, чем показать изображение, если нет - скройте его. Вы должны изменить выбранный флаг в своей деятельности, а затем обновить адаптер, чтобы снова создать свой список и показать, какой элемент вы выбираете. – Govtart