Я создал свой собственный класс, чтобы имитировать Snackbar, позволяет называть его CustomSnackbar. То, что я пытаюсь достичь, - это настроить закусочную и иметь возможность вызвать CustomSnackbar из моего основного вида деятельности, а использование будет очень похоже на вызов стандартной Snackbar. Для целей демонстрации моего примера без всего сыпучего кода, вот мой CustomSnackbar класс:Как использовать onClickListener с моим собственным классом
package com.wizzkidd.myapp.helpers;
import android.content.Context;
import android.support.design.widget.Snackbar;
import android.util.Log;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class CustomSnackbar {
Context _context;
Snackbar snackbar;
public CustomSnackbar(Context context) {
this._context = context;
}
public void make(View view, CharSequence text, int duration) {
snackbar = Snackbar.make(view, "", duration);
Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) snackbar.getView();
TextView textView = (TextView) snackbarLayout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE); //hide the default snackbar textview
//Create my own textview instead
TextView myTextView = new TextView(_context);
myTextView.setText(text);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); //Create layout params for some text
myTextView.setLayoutParams(params); //Apply the text layout params
snackbarLayout.addView(myTextView); //Add my text to the main snackbar layout. (Other widgets will also be added)
}
public void setAction(CharSequence text) {
snackbar.setAction(text, new View.OnClickListener() {
@Override
public void onClick(View view) {
//do something
Log.v("TAG", "You clicked the action");
}
});
}
public void show() {
snackbar.show();
}
}
В моей MainActivity, я использую класс, как это:
CustomSnackbar customSnackbar = new CustomSnackbar(activity);
customSnackbar.make(view, "This is my snackbar", Snackbar.LENGTH_INDEFINITE);
customSnackbar.setAction("HIDE");
customSnackbar.show();
Вы можете видеть, что я я использую мой метод .setAction для передачи строки/charsequence, но я не уверен, как обрабатывать onClickListener в одном и том же вызове вместо обработки onClickListener внутри класса
Пожалуйста, проигнорируйте тот факт, что класс может казаться бессмысленным (но это потому что я упростили его для целей этого вопроса). Я не уверен, что правильно создаю этот класс, поэтому любые дополнительные советы или предложения будут оценены. Благодарю.
спасибо. Из вашего примера я могу ясно видеть, чего мне не хватало, и как просто было разрешить. – WizzKidd
В качестве дополнения к моему вопросу (не уверен, как правильно это поместить в SO), как я могу имитировать классы Snackbar другими методами. Должен ли я расширять класс Snackbar из класса CustomSnackbar? Если это так, у вас есть пример, где мне нужно будет переопределить метод .make для меня. Имеет ли это смысл? – WizzKidd
Ваш текущий код выглядит как простой «Помощник», который сохраняет некоторые статические методы из вашего «основного кода», например «Активность». это просто подход, который вы выбрали, и все в порядке. вы также можете расширить оригинальный 'SnackBar', тогда вы должны поместить свой код из имени с именем« make »в конструктор или любой другой метод, внутри которого вы будете уверены, что« макет SnackBar уже реализован. Я теперь не твоя идея (как ты сказал, ты отрезал какой-то код).По моему мнению, версия «Помощник» может быть более удобной, и вы также можете предоставить дополнительный метод getOriginalSnackBar() с помощью 'back snackbar;' – snachmsm