ImageView onClickListener () - PullRequest
       25

ImageView onClickListener ()

0 голосов
/ 19 марта 2012

У меня проблемы с изменением состояния ImageView, которое помечает элементы списка как закладки.

Люди упоминали о создании нового OnClickListener(), который у меня есть, но когда я нажимаю на ImageView, он переходит в состояние фокусировки, но когда вы заканчиваете щелкать, он не изменяется на изображение в нажатом состоянии. Кроме того, когда я нажимаю на элемент списка, я замечаю, что ImageView снова фокусируется. Я не уверен, что мне не хватает:

public class DxSimpleCursorAdapter extends SimpleCursorAdapter {
Context context;
Activity activity;
ImageView image;

public DxSimpleCursorAdapter(Context context, int layout, Cursor c,
        String[] from, int[] to) {
    super(context, layout, c, from, to);
    this.context=context;
    this.activity=(Activity) context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent){
    View view = super.getView(position, convertView, parent);
    long id = getItemId(position);
    final ImageView image = (ImageView) view.findViewById(R.id.fav);

    image.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v){
            image.setBackgroundResource(R.drawable.ic_fav);

            final Button btn = (Button) v.findViewById(R.id.fav);
            btn.setPressed(true);
        }
    });
    return view;
}
}

Я создал xml для состояния ImageView следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_star_off_normal"
    android:state_checked="false"
    android:state_window_focused="false" />
<item android:drawable="@drawable/btn_star_on_normal"
    android:state_checked="true"
    android:state_window_focused="false" />

<item android:drawable="@drawable/btn_star_on_pressed"
    android:state_checked="true"
    android:state_pressed="true" />
<item android:drawable="@drawable/btn_star_off_pressed"
    android:state_checked="false"
    android:state_pressed="true" />

<item android:drawable="@drawable/btn_star_on_focused"
    android:state_checked="true"
    android:state_focused="true" />
<item android:drawable="@drawable/btn_star_off_focused"
    android:state_checked="false"
    android:state_focused="true" />

<item android:state_checked="false" android:drawable="@drawable/btn_star_off_normal" />
<item android:state_checked="true" android:drawable="@drawable/btn_star_on_normal" />
</selector>

В рамках своей деятельности я создал следующее OnListItemClick(), чтобы создать всплывающее сообщение, которое, кажется, также фокусируется на ImageView.

    public void onListItemClick(ListView parent, View view, int position, long id) {
    SQLiteDatabase db = (new DatabaseHelper(this)).getWritableDatabase();
    Cursor c = (Cursor) getListAdapter().getItem(position);
    String arg = c.getString(c.getColumnIndex("_id"));
    Cursor cursor = db.rawQuery("Select category, subcategory From DiagLookup Where _id = ?",  new String[]{""+arg});
    cursor.moveToFirst();

    Context context = getApplicationContext();
    CharSequence text = "Category: " + cursor.getString(cursor.getColumnIndex("category")) + "\nSubcategory: " + cursor.getString(cursor.getColumnIndex("subcategory"));
    int duration = Toast.LENGTH_SHORT;

    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
}

РАЗЪЯСНЕНИЕ о том, что я хочу, чтобы произошло:

У меня есть пункты списка, которые я хочу сделать двумя вещами; щелкните по элементу и получите сообщение с тостом, щелкните по представлению изображения и переключите представление изображения в состояние закладки в изображении, а также в бэкэнде.

В данный момент у меня работает тост-сообщение, но изображение не полностью работает ...

Я приложил скриншот элемента списка, чтобы показать, как он настроен, и объяснить, что происходит, когда я нажимаю на различные области.

ListItem with ImageView clickable

Верхний элемент списка был нажат и удержан, и я получаю, что изображение меняется на сфокусированное, но не кликнутое изображение, как показано в моем отрисовываемом XML-файле выше, но когда я заканчиваю щелчок, звезда становится более серой, чем другие записи, но оно не превращается в изображение состояния щелчка, которое является желтой звездой.

Когда я щелкаю в другом месте, а не на звезде, появляется всплывающее сообщение, которое я и собирался совершить, но я также замечаю, что звезда также становится сфокусированной. Я чувствую, что у меня возникли проблемы с наследованием, а также я не получаю состояние, чтобы придерживаться ImageView.

Ответы [ 2 ]

1 голос
/ 19 марта 2012

Проверьте эту ссылку.

https://stackoverflow.com/a/9754248/1244489

Это похожая проблема. Это немного сложнее, чем вы реализовали.

1 голос
/ 19 марта 2012

Итак, вы говорите, что вы хотите, чтобы при нажатии на изображение появлялось сообщение «Тост», и это все, что вы хотели, чтобы происходило правильно?

Если так, вот способ, которым я сделал бы это.

в вашем XML, вы должны сначала убедиться, что вы установили onClick на свои кнопки или изображения. Вы должны добавить это к каждой переменной

android:onClick = "Image1"

Тогда в вашем Java-файле вам нужно сослаться на него. Возможно, вы захотите внедрить OnClickListener в свою деятельность

public class DxSimpleCursorAdapter extends SimpleCursorAdapter implements OnClickListener{

Тогда обратитесь к нему в вашем Java-файле

public void Image1 (View v) {
    Toast.makeText(this, R.string.TEXT, Toast.LENGTH_SHORT).show();
}

Вы можете использовать свой метод создания тоста, но мой содержит только 1 строку кода.

Я не уверен, что это полностью отвечает на ваш вопрос, но это все, что я знаю о кодировании для Android (Java) до сих пор. Надеюсь, это поможет.

...