GridView OnItemClickListener не вызывает onItemClick - PullRequest
4 голосов
/ 07 декабря 2011

Я пытаюсь настроить OnItemClickListener для элементов в моем Gridview.По какой-то причине метод onItemCLick внутри слушателя никогда не вызывается.

Настройка прослушивателя и адаптера:

UsersAdapter usersAdapter = new UsersAdapter(venueUsers);
gridView.setAdapter(usersAdapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        Intent intent = new Intent(Users.this, com.roqbot.client.login.Profile.class);
        intent.putExtra("idUser", id);
        startActivity(intent);
    }
});

Мой адаптер:

private class UsersAdapter extends BaseAdapter implements ListAdapter {
    private JSONArray users;

    private UsersAdapter(JSONArray users) {
        this.users = users;
    }

    public int getCount() {
        return users.length();
    }

    public JSONObject getItem(int position) {
        return users.optJSONObject(position);
    }

    public long getItemId(int position) {
        return users.optJSONObject(position).optInt("idUser");
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null)
            convertView = Users.this.getLayoutInflater().inflate(R.layout.user_icon, null);

        JSONObject user = getItem(position);

        TextView username = (TextView) convertView.findViewById(R.id.username);
        username.setText(user.optString("sName"));

        TextView userScore = (TextView) convertView.findViewById(R.id.userScore);
        int iDJScore = user.optInt("iDJScore");
        if (iDJScore > 0) {
            userScore.setText(Integer.toString(iDJScore));
        }
        else {
            userScore.setVisibility(TextView.INVISIBLE);
            ((ImageView) convertView.findViewById(R.id.userScoreBg)).setVisibility(View.INVISIBLE);
        }

        TextView userLevel = (TextView) convertView.findViewById(R.id.userLevel);
        userLevel.setText(user.optString("iDJLevel"));

        TextView userMatch = (TextView) convertView.findViewById(R.id.userMatch);
        ImageView matchIcon = (ImageView) convertView.findViewById(R.id.matchIcon);
        int iCompatibility = user.optInt("iCompatibility");
        if (iCompatibility != 0) {
            userMatch.setText( iCompatibility + "%");
        }
        else {
            userMatch.setVisibility(TextView.INVISIBLE);
            matchIcon.setVisibility(ImageView.INVISIBLE);
        }

        ImageView userIcon = (ImageView) convertView.findViewById(R.id.userIcon);
        String sUserIcon = user.optString("sImageUrl-thumb");
        imageLoader.DisplayImage(sUserIcon, Users.this, userIcon);

        return convertView;
    }
}

Я довольно озадачен тем, почему прослушиватель щелчков не работает.Этот код работает во многих других местах для меня.

Ответы [ 2 ]

6 голосов
/ 13 июня 2013

У меня была такая же проблема.

В моей ситуации событие кликающего элемента "android: focusable = true"

В Макете моего списка элементов GridList

<TextView android:id="@+id/auction_item_title"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    ***android:focusable="true"***
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
/>

Iудалить [android: focusable = "true"], проблема решена

3 голосов
/ 19 июля 2013

На самом деле, вам просто нужно убедиться, что элементы в сетке не кликабельны. GridViews не может обрабатывать кликабельные элементы. Кнопки, например, не будут работать. А также, если вы сделали элемент из LinearLayout или любого другого элемента, не активируемого кликом, вы должны убедиться, что не установили свойство: clickable = "true".

...