如何在GridView中设置一些不可点击的项目

时间:2017-03-22 07:19:55

标签: android listview gridview

例如,我需要判断项目中项目的内容是否可以点击。 enter image description here 如图所示,我需要获取无法点击的灰色项目。

这是我的适配器

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

这是我的活动

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

        }
    }

}

我在我的适配器中设置了view.setClickable(false),但它不起作用。

2 个答案:

答案 0 :(得分:0)

item.setEnabled(false);

当你需要点击它时

item.setEnabled(true);

此处的项目是您的编辑文字或按钮或其他任何内容

试试这个:

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

答案 1 :(得分:0)

正确的方法是写一个布尔值,并让它基于布尔值来确定是否跳转。

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