ListView со специализированными кнопками внутри адаптера
Это пользовательский класс
public class TextWithButton{
protected String playerName;
public TextWithButton(String playerName){
this.playerName=playerName;
}
И это пользовательский адаптер
public class TextWithButtonAdapter extends ArrayAdapter<TextWithButton>{
Context context;
int layoutResourceId;
ArrayList<TextWithButton> data = null;
boolean isAddable;
public TextWithButtonAdapter(Context context, int layoutResourceId, ArrayList<TextWithButton> data, boolean isAddable) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
this.isAddable = isAddable;
}
@Override
public void add(TextWithButton object)
{
super.add(object);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
TextWithButtonHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new TextWithButtonHolder();
holder.playerNameText = (TextView)row.findViewById(R.id.player_name);
holder.processPlayerFab = (FloatingActionButton)row.findViewById(R.id.process_player);
row.setTag(holder);
}
else
{
holder = (TextWithButtonHolder)row.getTag();
}
TextWithButton textWithButton = data.get(position);
holder.playerNameText.setText(textWithButton.playerName);
if(isAddable)
{
holder.processPlayerFab.setImageResource(android.R.drawable.ic_menu_add);
holder.processPlayerFab.setBackgroundColor(context.getResources().getColor(android.R.color.holo_green_light));
}
else
{
holder.processPlayerFab.setImageResource(android.R.drawable.ic_menu_delete);
holder.processPlayerFab.setBackgroundColor(context.getResources().getColor(android.R.color.holo_red_light));
}
return row;
}
static class TextWithButtonHolder
{
TextView playerNameText;
FloatingActionButton processPlayerFab;
}
Я пытаюсь установить OnClickListener для этого FloatingActionButton снаружи адаптера, так как есть несколько функций, которые я хочу реализовать для него. Например, я хочу иметь два адаптера в каком-то классе, в котором они вызывают две разные функции при нажатии на них. Я также хотел бы избежать setOnItemClickListener ListView.
1 ответ
Хорошо, если я понимаю, что вы в основном хотите получить доступ к кнопке плавающего действия из ее представления контейнера, чтобы установить onclicklistner специально для него.
Способом сделать это будет своего рода цикл for, проходящий, скажем, через некоторые числовые теги, которые вы помещаете в плавающую кнопку действия. Такие как
floatingbutton.setTag("tag" + position);
и затем доступ к кнопке где-нибудь потенциально в цикле for, проходящем по списку, добавляя определенные эффекты onclick в его контейнерный класс.
(FloatingActionButton) listview.findViewWithTag("tag" + (int));
это позволит вам добавить onclicklisteners к плавающей кнопке действия из ее класса контейнера.
Если, конечно, я не понял вопрос.