0

Now I am displaying images in grid-view, it working fine. In that grid-view i am going to select few images, i want store selected multiple images position in array variable (example: if i select position 1, 4 ,10. i want that particular position id and i want to store it array like 1,4,10,15,). I will put my activity and adapter code below. Thank you in advance.

Activity

public class EM_event_total_userSeats extends AppCompatActivity implements RestCallback,AdapterView.OnItemClickListener {

String user_id,first_name,last_name,name,emailid,contact_no,gender1,date_of_birth,country_id,postal_code,rolename,profession_response,Street_Address,City,photo;
GridView GridUserSeats;
;
TextView textView1,textView2,Tvposition;

ImageView Ivseats;

public static EM_event_total_userseatsAdapter adapter;
ArrayList<EM_event_total_UserSeatsModel> EMeventuserseatslist;
View savedView;
View previous = null;
String event_id = "EVEPRI62";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.em_event_total_user_seats);
    initviews();
    callSeatsApi();

    GridUserSeats.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                                int position, long id) {

            String a = String.valueOf(position);

            Toast.makeText(EM_event_total_userSeats.this, a + "#Selected", Toast.LENGTH_SHORT).show();
            v.setBackgroundColor(Color.GREEN);
            adapter.notifyDataSetChanged();
        }
    });

}

private void initviews() {

    GridUserSeats=(GridView)findViewById(R.id.GridUserSeats);
    GridUserSeats.setOnItemClickListener(this);



    textView1=(TextView) findViewById(R.id.textView1);

   // textView2=(TextView) findViewById(R.id.textView2);

    Intent intent = getIntent();

    first_name = intent.getStringExtra("first_name");
    last_name = intent.getStringExtra("last_name");

}

private void callSeatsApi() {

    HashMap<String, String> map = new HashMap<String, String>();
    map.put("events", event_id);
    RestService.getInstance(EM_event_total_userSeats.this).getUserSeats(map, new MyCallback<ArrayList<EM_event_total_UserSeatsModel>>(EM_event_total_userSeats.this,
            EM_event_total_userSeats.this, true, "Finding seats....", GlobalVariables.SERVICE_MODE.EM_SEATS));
}

@Override
public void onFailure(Call call, Throwable t, GlobalVariables.SERVICE_MODE mode) {

}

@Override
public void onSuccess(Response response, GlobalVariables.SERVICE_MODE mode)
{
    switch (mode)
    {
        case EM_SEATS:
            EMeventuserseatslist = (ArrayList<EM_event_total_UserSeatsModel>)response.body();
            adapter = new EM_event_total_userseatsAdapter(EMeventuserseatslist, getApplicationContext());
            GridUserSeats.setAdapter(adapter);
            break;
    }

}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


}

}

Adapter

    import android.content.Context;
    import android.content.Intent;
     import android.support.annotation.NonNull;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    import com.squareup.picasso.Picasso;
    import java.util.ArrayList;
    import java.util.List;
    import cfirst.live.com.R;
    import cfirst.live.com.model.BasketModel;
    import cfirst.live.com.model.EM_event_total_UserSeatsModel;


public class EM_event_total_userseatsAdapter extends ArrayAdapter<EM_event_total_UserSeatsModel> implements View.OnClickListener {
ArrayList<EM_event_total_UserSeatsModel> dataSet;
public ArrayList<EM_event_total_UserSeatsModel> EMeventuserseatslist = new ArrayList<EM_event_total_UserSeatsModel>();
Context mContext;
ViewHolder holder;
String user_seats;
private int[] tagCollection;
private String[] mobileValues;
private  String[] mobileValuesD;

private static class ViewHolder {
    TextView TvEmUserSeats;
    ImageView IvUsreSeats,available,selctedimag;

}
private String[] strings;
List<Integer> selectedPositions = new ArrayList<>();


public EM_event_total_userseatsAdapter(ArrayList<EM_event_total_UserSeatsModel> data, Context context) {
    super(context, R.layout.list_em_get_seats, data);
    this.dataSet = data;
    this.mContext=context;

}
public int getTagFromPosition(int position) {
    return tagCollection[position];
}

@Override
public void onClick(View v) {
    int position=(Integer) v.getTag();
    Object object= getItem(tagCollection[position]);

    EM_event_total_UserSeatsModel dataModel=(EM_event_total_UserSeatsModel) object;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    // Get the data item for this position
    EM_event_total_UserSeatsModel dataModel = getItem(position);
    // Check if an existing view is being reused, otherwise inflate the view
    ViewHolder viewHolder; // view lookup cache stored in tag

    final View result;


    if (convertView == null) {

        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(getContext());
        convertView = inflater.inflate(R.layout.list_em_get_seats, parent, false);


        viewHolder.TvEmUserSeats = (TextView) convertView.findViewById(R.id.TvEmUserSeats);
        viewHolder.IvUsreSeats = (ImageView) convertView.findViewById(R.id.IvUsreSeats);


        result=convertView;

        convertView.setTag(viewHolder);
      } else {
        viewHolder = (ViewHolder) convertView.getTag();
        result=convertView;
      }



    String blue_available = "seat3.png";
    String red_booked = "seat1.png";

    String get_seat = dataModel.getBookedStatus();
    viewHolder.TvEmUserSeats.setText(dataModel.getSeatName());
    if(Integer.parseInt(get_seat) == 1){
        Picasso.with(mContext).load("imageurl + red_booked).into(viewHolder.IvUsreSeats);

    }else
    {

        Picasso.with(mContext).load("imageurl + blue_available).into(viewHolder.IvUsreSeats);

    }      
    return convertView;
}
}
4
  • time has come to move on Recyclerview Commented Dec 7, 2017 at 9:40
  • is there any way in grid view ,already i spend more time to do this. Commented Dec 7, 2017 at 9:41
  • yes you can i'm just saying Recyclerview is more powerfull... is your grid item has checkbox or anything else so that u r selecting them? Commented Dec 7, 2017 at 9:42
  • if i use checkbox, how to get multiple positins..? Commented Dec 7, 2017 at 9:46

2 Answers 2

1

It's simple. You can use SparseBooleanArray for this purpose. Just add the following methods as is in your adapter:

public void toggleSelection(int item) {
    if (selectedItems.get(item, false)) {
        selectedItems.delete(item);
    } else {
        selectedItems.put(item, true);
    }

    notifyDataSetChanged();
}

public void setSelectedItems(List<Object> objects) {
    if (objects != null) {
        for (Object object : objects) {
            toggleSelection(object.getId());
        }

        notifyDataSetChanged();
    }
}

public void clearSelections() {
    selectedItems.clear();
    notifyDataSetChanged();
}

public int getSelectedItemCount() {
    return selectedItems.size();
}

public List<Integer> getSelectedItems() {
    List<Integer> items =
            new ArrayList<Integer>(selectedItems.size());
    for (int i = 0; i < selectedItems.size(); i++) {
        items.add(selectedItems.keyAt(i));
    }
    return items;
}

Use the set selection method to store the selected status of your item. Don't forget to initialize SparseBooleanArray in your constructor.

SparseBooleanArray SparseBooleanArray = new SparseBooleanArray();

After that, use toggleSelection(position); to change the selected status of an item, then after performing selections, call getSelectedItem() to get the selected items in an array.

Sign up to request clarification or add additional context in comments.

5 Comments

first tell me do you want selected item positions in a comma separeted string?
link Here is your modified code
now when you want to get the selected items in your activity call String selectedItems = adapter.getSelectedItems();
Thank you, Umar, you saved my day. But i have another question. if i click first item it taking blank and second item start with item next position...?
if i select 99,98,97,96. it displaying 99,98,97 only and how separate with ( , comma)
0

// create an Arraylist and add the selected position in a list

List <int> selectedArray = new ArrayList<>();

  @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {



int click = (int) parent.getItemAtPosition(position);

selectedArray.add(click);
}

4 Comments

can you describe your answer for more understanding.
i am displaying 100 seats using grid-view, now i want select random seats in with in 100 seats, randoms seats like 2,6, 10, 15. i need pass this positions to rest-full API variable. so i need random seats like 2,5,10,15 in one variable.
store selected position in another array and pass the array to the rest full api
@adnan tariq, i am struggling to store multiple positions in array. help me out

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.