Изменение цвета textview из массива textviews

#android #arrays #android-fragments #butterknife

#Android #массивы #android-фрагменты #нож для масла

Вопрос:

Я использую textviews в виде списка, при щелчке каждого textview открывается фрагмент. Я хочу изменить фон textview и его цвет при нажатии. При нажатии на другой textview предыдущий цвет фона и цвет текста должны измениться на цвет по умолчанию. Я использую Butterknife для связывания всех textviews в массив.

Вот мой код :

 public class AccountMenuFragment extends Fragment {

private accountMenuCallback callback;
private boolean stateChanged;

public AccountMenuFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
    try {
        callback = (accountMenuCallback) getActivity();
    } catch (ClassCastException e) {
        e.printStackTrace();
        throw new ClassCastException("Calling Activity/Fragment must implement DialogClickListener interface");
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_my_account, container, false);
    ButterKnife.bind(this, view);
    return view;
}

@OnClick({R.id.rlAccount, R.id.rlBusiness, R.id.rlIndustry,
        R.id.rlVerification, R.id.rlBank, R.id.rlPersonal, R.id.rlPassword})
public void changeColor(TextView textView) {
    stateChanged = !stateChanged;
    if (stateChanged) {
        // reset background to defau<
        textView.setTextColor(getResources().getColor(R.color.text_color));
        textView.setBackgroundColor(Color.WHITE);
    } else {
        textView.setTextColor(Color.WHITE);
        textView.setBackgroundColor(getResources().getColor(R.color.text_color_blue));
    }
}}
  

Но он меняет свой цвет при двойном щелчке того же textview. Но я хочу изменить и восстановить предыдущий одним щелчком мыши.

Комментарии:

1. private boolean stateChanged = !stateChanged; что ты здесь делаешь? private Переменная внутри метода? это вообще компилируется?

2. private boolean StateChanged; является глобально объявленной переменной

3. вы должны использовать эту переменную, используя this.varabaleName в методе, если существует переменная с тем же именем……….

4. если вы используете butterknife, проверьте опцию «ПРОСМОТР СПИСКОВ», описанную на сайте jakewharton.github.io/butterknife

5. @sushildlh Нет. Это все то же самое.

Ответ №1:

Установите первое представление как выбранное по умолчанию и объявите его как lastSelectedView.

 public class AccountMenuFragment extends Fragment {

private accountMenuCallback callback;
@Bind(R.id.rlAccount)
TextView lastSelectedView;

public AccountMenuFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
    try {
        callback = (accountMenuCallback) getActivity();
    } catch (ClassCastException e) {
        e.printStackTrace();
        throw new ClassCastException("Calling Activity/Fragment must implement DialogClickListener interface");
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_my_account, container, false);
    ButterKnife.bind(this, view);
    return view;
}

@OnClick({R.id.rlAccount, R.id.rlBusiness, R.id.rlIndustry,R.id.rlVerification, R.id.rlBank, R.id.rlPersonal, R.id.rlPassword})
public void changeColorOfTextView(TextView textView) {
   // reset background to defau<
   lastSelectedView.setTextColor(getResources().getColor(R.color.text_color));
   lastSelectedView.setBackgroundColor(Color.WHITE);

   // change color
   textView.setTextColor(Color.WHITE);
   textView.setBackgroundColor(getResources().getColor(R.color.text_color_blue));
   lastSelectedView = textView;
}}