Android ListView get last selected item and get last selected item from other ListView in onItemClick

StackOverflow https://stackoverflow.com/questions/22537314

Domanda

I have two ListView. Both of them use the same adapter. I want to choose items mutually exclusive from these two lists. For every item in list view I have layout

<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> 

I do image visible when item was selected.

I don't know how get last selected view from listview and how get selected view by id from other listview.

I read documentation for ListView, Adapter, AdapterView and can't find solution

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);
            }
        });

Can anyone help me resolve this problem?

//UPDATED

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;
        }
    }
È stato utile?

Soluzione 2

I resolve my problem. Here my code

 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;
        }
    }

Altri suggerimenti

You should implement your pick logic into your Adapter, just transfer a flag to detect from which list you pick the item. And could you show your adapter code and what do you add in your pointRequestsList ? Create class

class YourItemClass
{
  public boolean selected;
//...
}

And now create two lists for each listView:

 ArrayList<YourItemClass> list1 = new ArrayList<YourItemClass>();
 ArrayList<YourItemClass> list2 = new ArrayList<YourItemClass>();

Transfer this lists into your adapter, for example for list #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();
      }

Same you whould do for another listView using list2

And now in your adapter use this for example

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);
}

And now you have two lists with picked items (picked if list1.get(position).selected == true)

If you have any questions - just ask Sorry for my bad English :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top