2016-06-14 2 views
0

Прямо сейчас я занимаюсь функциями чата. Я расширяю ArrayAdapter. С помощью только этого массива ArrayAdapter я могу достичь многих функций в чате. Поэтому я не могу изменить этот массив ArrayAdapter ,Как использовать два адаптера в одном классе

Но я должен использовать другой адаптер (BaseSwipeListAdapter.java), чтобы получить доступную функцию влево (включить или отключить).

ChatActivity.java: (с использованием ChatAdapter внутри этого класса):

static public class ChatAdapter extends ArrayAdapter<ChatMessage> { 

    private final List<ChatMessage> chatMessages; 
    private Activity context; 
    String loggedUserId, loggedUserName; 

    public ChatAdapter(Activity context, int resource, List<ChatMessage> chatMessages) { 
     super(context, resource, chatMessages); 
     this.context = context; 
     this.chatMessages = chatMessages; 
    } 

    } 

мне нужно использовать этот код, приведенный ниже в ChatActivity.java, чтобы достичь своей result.But я не могу продлить BaseSwipeListAdapter.Because Я уже использую ArrayAdapter.

@Override 
    public boolean getSwipEnableByPosition(int position) { 
     if(position % 2 == 0){ 
      return false; 
     } 
     return true; 
    } 

BaseSwipeListAdapter.java:

import android.widget.BaseAdapter; 


public abstract class BaseSwipListAdapter extends BaseAdapter { 

    public boolean getSwipEnableByPosition(int position){ 
     return true; 
    } 



} 

SwipeMenuAdapter.java: (Libarary класс):

public class SwipeMenuAdapter implements WrapperListAdapter, 
     OnSwipeItemClickListener { 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     SwipeMenuLayout layout = null; 

     if (mAdapter instanceof BaseSwipListAdapter) { 

      boolean swipEnable = (((BaseSwipListAdapter) mAdapter).getSwipEnableByPosition(position)); 

      layout.setSwipEnable(swipEnable); --->This line is used to enable and disable the swipe left in listview.I need to use this method 
     } 

     return layout; 
    } 

Как назвать этот метод setSwipEnable (swipEnable) в ChatActivity. класс

Я думаю, что невозможно использовать два адаптера в одном классе. Есть ли альтернативный способ решить эту проблему.

+0

Я думаю, что вы можете сделать это с помощью интерфейса создать один интерфейс и расширить салфетки адаптер в нем, а затем реализовать этот интерфейс в адаптере чат ... – Vickyexpert

+0

@Vickyexpert только сейчас я пытался использовать interface.But него не работает – Steve

+0

@Naruto, пожалуйста, опишите свое требование больше. Вы хотите использовать список прокрутки меню? –

ответ

0

Вы можете проверить это, если условия, если размер ListView больше 0.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    SwipeMenuLayout layout = null; 

    if (mAdapter instanceof BaseSwipListAdapter) { 

     boolean swipEnable = (((BaseSwipListAdapter) mAdapter).getSwipEnableByPosition(position)); 
     if(listviewsize > 0) 
     layout.setSwipEnable(swipEnable); --->This line is used to enable and disable the swipe left in listview.I need to use this method 
     else 
     layout.setSwipEnable(swipDisable); 
    } 

    return layout; 
} 

вы можете проверить listviewsize по

@Override 
    public int getCount() { 
     return listview.size(); 
    } 
+0

Благодарим вас за ответ. Но я думаю, что вы не поняли мой вопрос. Как назвать этот метод setSwipEnable (swipEnable) в ChatActivity.class – Steve

+0

сделал yu, попробовав с использованием одноэлементного класса или используя интерфейс? –

0

Вы можете сделать некоторые изменения в библиотеке для этого. В вашем классе bean-компонента ChatMessage вы можете взять логическую переменную для того, что вы хотите включить или отключить опцию салфетки. После этого при установке адаптера в классе SwipeMenuListView вам нужно передать ArrayList из класса ChatMessage. После этого, где будет записан код mTouchPosition, вы можете проверить ту же позицию класса ChatMessage, что swipe boolean - это true или false. Если swipe boolean - false, тогда возвращайте false после назначения mTouchPosition другим мудрым обработчиком всех событий касания.

0

Внедрение ArrayAdapter Функциональность от BaseAdapter является не сложно.

static public class ChatAdapter extends BaseAdapter { // or BaseSwipListAdapter if you like 

    private final List<ChatMessage> chatMessages; 
    private Activity context; 
    private int layoutId; 
    String loggedUserId, loggedUserName; 

    public ChatAdapter(Activity context, int resource, List<ChatMessage> chatMessages) { 
     super(context, resource, chatMessages); 
     this.context = context; 
     layoutId = resource; 
     this.chatMessages = chatMessages; 
    } 

    @Override 
    public int getCount() { 
     return chatMessages == null ? 0 : chatMessages.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return chatMessages == null ? null : chatMessages.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup parent) { 

     if (view == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(layoutId, parent, false); 
     } 

     // assuming the view is a TextView 
     ((TextView) view).setText(getItem(position).toString()); 

     return view; 
    } 

    public void add(ChatMessage chatMessage) { 
     chatMessages.add(chatMessage); 
     notifyDataSetChanged(); 
    } 

    public void addAll(Collection<? extends ChatMessage> col) { 
     chatMessages.addAll(col); 
     notifyDataSetChanged(); 
    } 

    public void clear() { 
     chatMessages.clear(); 
     notifyDataSetChanged(); 
    } 
} 
Смежные вопросы