【问题标题】:How to get gridview multiple positions and store into array variable如何获取gridview多个位置并存储到数组变量中
【发布时间】:2017-12-07 09:35:40
【问题描述】:

现在我在网格视图中显示图像,它工作正常。在该网格视图中,我将选择几个图像,我想将选定的多个图像位置存储在数组变量 中(例如:如果我选择位置 1、4、10。我想要那个特定的位置 id 并且我想存储它的数组像 1,4,10,15,)。我将把我的活动和适配器代码放在下面。提前谢谢你。

活动

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


}

}

适配器

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

【问题讨论】:

  • 是时候进入 Recyclerview 了
  • 网格视图有什么办法吗,我已经花更多时间来做这件事了。
  • 是的,我只是说 Recyclerview 更强大...您的网格项目是否有复选框或其他任何东西,以便您选择它们​​?
  • 如果我使用复选框,如何获得多个位置..?

标签: android android-gridview


【解决方案1】:

这很简单。为此,您可以使用 SparseBooleanArray。只需在适配器中添加以下方法即可:

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

使用设置选择方法来存储您的项目的选择状态。 不要忘记在构造函数中初始化 SparseBooleanArray。

SparseBooleanArray SparseBooleanArray = new SparseBooleanArray();

之后,使用toggleSelection(position);改变一个item的选中状态,然后在执行完选择后调用getSelectedItem()得到一个数组中的选中item。

【讨论】:

  • 首先告诉我你想在逗号分隔的字符串中选择项目的位置吗?
  • link 这是您修改后的代码
  • 现在当你想在你的活动调用中获取选定的项目时 String selectedItems = adapter.getSelectedItems();
  • 谢谢你,Umar,你拯救了我的一天。但我还有一个问题。如果我点击第一个项目它会占用空白,第二个项目从项目的下一个位置开始......?
  • 如果我选择 99,98,97,96。它只显示 99,98,97 以及如何用 ( , 逗号) 分隔
【解决方案2】:

// 创建一个 Arraylist 并将所选位置添加到列表中

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

【讨论】:

  • 您能否描述一下您的答案以便于理解。
  • 我正在使用网格视图显示 100 个座位,现在我想在 100 个座位中选择随机座位,随机座位如 2,6,10,15。我需要通过这个位置来休息API 变量。所以我需要一个变量中的随机座位,如 2,5,10,15。
  • 将所选位置存储在另一个数组中,并将该数组传递给其余完整的api
  • @adnan tariq,我正在努力在数组中存储多个位置。帮帮我
猜你喜欢
  • 2018-04-01
  • 1970-01-01
  • 2017-03-15
  • 2019-12-25
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多