2017-12-07 18 views
0

グリッドビューで画像を表示していますが、正常に動作しています。そのグリッドビューでは、私はいくつかの画像を選択するつもりです、私は配列変数(例:私は位置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; 
} 
} 
+0

時間はRecyclerview –

+0

に動くようになってきたリストで選択された位置を追加します。 –

+0

はい、私はちょうどRecyclerviewがより強力であると言うことができます...あなたのグリッドアイテムはチェックボックスや他の何かを持っているので、それらを選択するのですか? –

答えて

0

それは簡単です。この目的のために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(); 

、次に選択を行った後、アレイ内の選択された項目を取得するためにgetSelectedItem()を呼び出して、項目の選択状態を変更するためにtoggleSelection(position);を使用します。

+0

私のコードで編集してください。 –

+0

最初に、選択した項目の位置をカンマ区切りの文字列で指定したいのですか? –

+0

はい。例:exparry = 1,5,7、 –

0

//は、すでに私はこれを行うにはより多くの時間を費やして、グリッドビューでどのような方法があるの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); 
} 
+0

とはどのように分かれているのかを分かりやすく解説できます。 –

+0

私はグリッドビューを使って100席を表示しています。今は100席のランダム席、2,6,10,15席のランダム席を選択したいと思います。この位置を完全なAPI変数に渡す必要があります。だから私は1つの変数で2,5,10,15のようなランダムな座席が必要です。 –

+0

別の配列に選択した位置を格納し、配列を残りの部分に渡します。 –

関連する問題