Установите состояние кнопки и сохраните его после нажатия - PullRequest
3 голосов
/ 22 февраля 2011

Я не уверен, что это даже возможно. У меня есть эта кнопка:

<Button 
android:id="@+id/b1" 
android:layout_width="wrap_content" 
android:layout_height="45px"
android:drawableTop="@drawable/buttontv"
android:layout_weight="1"
android:background="@null"
android:textColor="#ffffff"
android:textSize="9px"
android:text="TV"/>

И эта кнопка имеет этот элемент XML:

<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
 android:state_focused="true"
 android:state_pressed="false"
 android:drawable="@drawable/tv" />
<item
 android:state_focused="true"
 android:state_pressed="true"
 android:drawable="@drawable/tv_pressed" />
<item
 android:state_focused="false"
 android:state_pressed="true"
 android:drawable="@drawable/tv_pressed" />
<item  
 android:drawable="@drawable/tv" />
</selector>

И в моем приложении я использую этот код для нажатия моей кнопки:

            OnClickListener b1Listener = new OnClickListener(){             
                    @Override
                    public void onClick(View v) {   loadUrl("http://example.org/"); v.setPressed(true); }
            };
            Button b1 = (Button) findViewById(R.id.b1);
            b1.setOnClickListener(b1Listener);

Что бы я хотел сделать, когда я нажал кнопку, drawableTop устанавливает один из элементов со значением атрибута @ drawable / tv_pressed - и остается там (как в «это активная кнопка»).

Я попытался добавить v.setPressed (true) в функцию onClick (поскольку это было все, что я мог найти в Google), но это не сработало.

Можно ли это сделать? Или есть лучшая альтернатива тому, чего я пытаюсь достичь?

Ответы [ 4 ]

5 голосов
/ 22 февраля 2011

Если вам нужна кнопка, которая нажимается и остается активной, используйте ToggleButton

1 голос
/ 07 мая 2014

https://stackoverflow.com/a/9750125/1257369

    button.setFocusable(true);
    button.setFocusableInTouchMode(true);///add this line

или с styles.xml

    <item name="android:focusable">true</item>
    <item name="android:focusableInTouchMode">true</item>
0 голосов
/ 25 апреля 2013

Вы работаете с диалогами / фрагментами диалогов? Этот код может помочь вам, если у вас есть, потому что у меня была схожая проблема, и это работало для меня. :)

1 - расширить свой класс с DialogFragment , Переопределить метод Onstart ().

@Override
public void onStart() {
super.onStart();
final AlertDialog D = (AlertDialog) getDialog();
if (D != null) {
    Button positive = (Button) D.getButton(Dialog.BUTTON_POSITIVE);
    positive.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            if (edittext.equals("")) {
  Toast.makeText(getActivity(), "EditText empty don't close",Toast.LENGTH_SHORT).show();
            } else {
            D.dismiss(); //dissmiss dialog
            }
        }
    });
}}
0 голосов
/ 14 февраля 2013

, как указано выше в ответе, идеально использовать кнопку переключения, но если вы используете просмотр списка в этом сценарии, то кнопка переключения блокирует setOnItemClickListener вашего просмотра списка.Вы также можете исправить эту проблему, добавив потомков, заблокированных в макете списка.Однако некоторые люди сообщают, что даже тогда их элементы списка не будут щелкать после использования кнопок переключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...