95DBC
95DBC

Reputation: 31

How to set some item unclickable in GridView

For example, I need to judge the contents of the item in the Item can be clicked. enter image description here As shown in the picture, I need to get the gray Item cannot be clicked.

Here is my adapter

 public class RoomAdapter extends BaseAdapter {
        private LayoutInflater mInflater;
        private Context mContext;
        private List<Room> mDatas;


        public RoomAdapter(Context context, List<Room> mDatas) {
            mInflater = LayoutInflater.from(context);
            this.mContext = context;
            this.mDatas = mDatas;
        }

        @Override
        public int getCount() {
            return mDatas.size();
        }

        @Override
        public Object getItem(int position) {
            return mDatas.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Room room = mDatas.get(position);
            ViewHolder viewHolder = null;
            View view;
            if (convertView == null) {
                viewHolder = new ViewHolder();
                view = mInflater.inflate(R.layout.roomstate_item, null);
                viewHolder.tv_roomstate = (TextView) view.findViewById(R.id.tv_roomstate);
                viewHolder.tv_roomnumber = (TextView) view.findViewById(R.id.tv_roomnumber);
                viewHolder.tv_roomtype = (TextView) view.findViewById(R.id.tv_roomtype);
                viewHolder.tv_roomprice = (TextView) view.findViewById(R.id.tv_roomprice);
                view.setTag(viewHolder);
            }else{
                view = convertView;
                viewHolder = (ViewHolder) view.getTag();
            }
    //        String nu = room.getRoom_number();
            viewHolder.tv_roomstate.setText(room.getRoom_status());
            viewHolder.tv_roomnumber.setText(room.getRoom_number());
            viewHolder.tv_roomtype.setText(room.getRoomType().getRoom_type_name());
            viewHolder.tv_roomprice.setText(room.getRoomType().getRoom_type_price());

            if (room.getRoom_status().equals("0") &&room.getRoomType().getRoom_type_name().equals("0")) {
                view.setBackgroundResource(R.drawable.single);
               view.setClickable(false);
            } else if (room.getRoom_status().equals("1") && room.getRoomType().getRoom_type_name().equals("0")) {
                view.setBackgroundResource(R.drawable.single_b);
            } else if (room.getRoom_status().equals("1") && room.getRoomType().getRoom_type_name().equals("1")) {
                view.setBackgroundResource(R.drawable.double_b);
            } else if(room.getRoom_status().equals("0") && room.getRoomType().getRoom_type_name().equals("1")){
                view.setClickable(false);
                view.setBackgroundResource(R.drawable.doubleg);
            }

            return view;
        }

        private class ViewHolder {
            TextView tv_roomnumber;
            TextView tv_roomstate;
            TextView tv_roomtype;
            TextView tv_roomprice;
        }
    }

Here is my Activity

public class RoomList extends Activity {
    private ImageView iv_back;
    private TextView tv_hotelname;

    private GridView griv_hotel;

    private RoomAdapter adapter;
    private String hotelname;
    private String url
            = "http://jm/user/room/selectRoomByHotelName?hotel_name=";

    private List<Room> mRoom;
    private RoomType mRoomType;
    private boolean isfinish = false;//判断请求是否完成
    private String hotel_address;
    private String hotel_id;
    private Bundle mBundle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_book_room_list);
        init();
        sendRequestWithOkHttp();
        boolean is = true;
        while (is) {
            if (isfinish) {
                adapter = new RoomAdapter(this, mRoom);
                griv_hotel.setAdapter(adapter);
                griv_hotel.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        TextView tv_roomnumber = (TextView) view.findViewById(R.id.tv_roomnumber);
                        TextView tv_roomstate = (TextView) view.findViewById(R.id.tv_roomstate);
                        TextView tv_roomprice = (TextView) view.findViewById(R.id.tv_roomprice);
                        TextView tv_roomtype = (TextView) view.findViewById(R.id.tv_roomtype);

                        String roomnumber = tv_roomnumber.getText().toString();
                        String roomstate = tv_roomstate.getText().toString();
                        String roomtype = tv_roomtype.getText().toString();
                        String roomprice = tv_roomprice.getText().toString();

                        Log.e("房间类型",roomtype);

//                        if (roomstate.equals("0") && roomtype.equals("0")) {
//                            view.setClickable(false);
//                        } else if (roomstate.equals("1") && roomtype.equals("0")) {
//                           view.setClickable(true);
//                        } else if (roomstate.equals("1") && roomtype.equals("1")) {
//                            view.setClickable(true);
//                        } else {
//                            view.setClickable(false);
//                        }

                        mBundle.putString("roomnumber", roomnumber);
                        mBundle.putString("roomstate", roomstate);
                        mBundle.putString("roomtype", roomtype);
                        mBundle.putString("roomprice", roomprice);
                        mBundle.putString("hoteladdress", hotel_address);
                        mBundle.putString("hotelid", hotel_id);


                        Intent intent = new Intent(RoomList.this, BookRoomDetail.class);
                        intent.putExtras(mBundle);
                        startActivity(intent);
                    }
                });
                is = false;
            }
        }


    }

    private void init() {
        initView();
        initEvents();
    }

    private void initEvents() {
        iv_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }

    private void initView() {
        iv_back = (ImageView) findViewById(R.id.iv_back);
        tv_hotelname = (TextView) findViewById(R.id.tv_hotelname);
        mBundle = getIntent().getExtras();
        hotelname = mBundle.getString("hotelname");

        tv_hotelname.setText(hotelname);
        griv_hotel = (GridView) findViewById(R.id.griv_hotel);


    }

    private void sendRequestWithOkHttp() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                MediaType MEDIA_TYPE_MARKDOWN
                        = MediaType.parse("text/x-markdown; charset=utf-8");
                try {
                    OkHttpClient client = new OkHttpClient();
                    String postBody = hotelname;
                    Request request = new Request.Builder()
                            .url(url + hotelname)
                            .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody))
                            .build();
                    Response response = client.newCall(request).execute();
                    String responseData = response.body().string();
                    try {
                        parseJSON(responseData);
                        isfinish = true;
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    private void parseJSON(String responseData) throws JSONException {
        JSONArray JSONArray = new JSONArray(responseData);
        mRoom = new ArrayList<Room>();
        for (int i = 0; i < JSONArray.length(); i++) {
            try {
                JSONObject JSON = JSONArray.getJSONObject(i);
                String room_number = JSON.getString("room_number");
                String room_status = JSON.getString("room_status");
                JSONObject jsonObject = JSON.getJSONObject("roomType");
                String room_type_name = jsonObject.getString("room_type_name");
                String room_type_price = jsonObject.getString("room_type_price");
                JSONObject jsonObj = JSON.getJSONObject("hotel");
                hotel_id = String.valueOf(jsonObj.getInt("hotel_id"));
                hotel_address = jsonObj.getString("hotel_location");
                mRoomType = new RoomType(null, room_type_name, room_type_price, null, null);

                mRoom.add(new Room(null, room_number, room_status, null, null, mRoomType));
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }

}

I set view.setClickable (false)in my Adapter, but it does not work.

Upvotes: 0

Views: 155

Answers (2)

95DBC
95DBC

Reputation: 31

The right way is to write a Boolean value, and let it based on a Boolean value to determine whether to jump.

private boolean checkedIntent = false;


if (roomstate.equals("0") && roomtype.equals("0")) {
                        checkedIntent = false;
                    } else if (roomstate.equals("1") && roomtype.equals("0")) {
                        checkedIntent = true;
                    } else if (roomstate.equals("1") && roomtype.equals("1")) {
                        checkedIntent = true;
                    } else if (roomstate.equals("0") && roomtype.equals("1")) {
                        checkedIntent = false;
                    }

if (checkedIntent == true) {
                            Intent intent = new Intent(RoomList.this, BookRoomDetail.class);
                            intent.putExtras(mBundle);
                            startActivity(intent);
                        }

Upvotes: 0

Muhammad Saad Rafique
Muhammad Saad Rafique

Reputation: 3189

item.setEnabled(false);

when u need to make it clickable call

item.setEnabled(true);

Here item is your edittext or button or anything else

Try this:

if (room.getRoom_status().equals("0") &&room.getRoomType().getRoom_type_name().equals("0")) {
                view.setBackgroundResource(R.drawable.single);
               view.setEnabled(false);
            } else if (room.getRoom_status().equals("1") && room.getRoomType().getRoom_type_name().equals("0")) {
                view.setBackgroundResource(R.drawable.single_b);
            } else if (room.getRoom_status().equals("1") && room.getRoomType().getRoom_type_name().equals("1")) {
                view.setBackgroundResource(R.drawable.double_b);
            } else if(room.getRoom_status().equals("0") && room.getRoomType().getRoom_type_name().equals("1")){
                view.setEnabled(false);
                view.setBackgroundResource(R.drawable.doubleg);
            }
            else
            view.setEnabled(true);

Upvotes: 2

Related Questions