Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Android/Java. Как делается диалог чата с разделением на правую и левую стороны?

#android #listview #view #adapter #chat


Как сделать диалог Чата такого вида?



Вот чтобы справа и слева отображалось при приеме и отправке соответственно..

Если бы там только текст был.. то можно было бы Gravity применять.. а там еще картинка..
это получается как то надо две заготовки и скрывать их????

или как то кастомные адаптеры создать? Если есть, приведите подобные кусочки кода..

У меня код такой:

public static class MySimpleAdapter extends SimpleAdapter {

   private List> results;
   private Context mContext;

   public MySimpleAdapter(Context context, List> data, int
resource, String[] from, int[] to) 
    {
        super(context, data, resource, from, to);
        this.results = data;
        this.mContext = context;

    }

     public View getView(int position, View view, ViewGroup parent)
     {
        View v = view;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            v = vi.inflate(R.layout.mymsg, null);
        }


        if (!results.get(results.size()-1).containsKey("to")) 

        {           
        TextView tt = (TextView) v.findViewById(R.id.mytxt);
        tt.setText(results.get(results.size()-1).get("msg"));
        v.findViewById(R.id.mymsg).setVisibility(View.VISIBLE);
        v.findViewById(R.id.memsg).setVisibility(View.GONE);

        }
        else
        {

        TextView tt= (TextView) v.findViewById(R.id.metxt);
        tt.setText(results.get(results.size()-1).get("msg"));

        v.findViewById(R.id.mymsg).setVisibility(View.GONE);
        v.findViewById(R.id.memsg).setVisibility(View.VISIBLE);
        }

        return v;
    }
}


И код отправки/приема:

HashMap map = new HashMap(); 
try {
Message message = new Message();
message.setBody(msg.getText().toString()+ "\n");
sendMessage(message);
map.put("msg", message.getBody().toString());
map.put("to", message.getTo().toString());
usersList.add(map);
sadapter =  new MySimpleAdapter(getActivity(),  usersList, R.layout.mymsg, from, to);
listView.setAdapter(sadapter);
sadapter.notifyDataSetChanged();
} catch (NotConnectedException e) {
// TODO Auto-generated catch block
e.printStackTrace();

    


Ответы

Ответ 1



План следующий: 1 - создать два типа леяута, для отображения исходящего и входящего сообщения 2 - в адаптере переопределить метод public int getItemViewType(int position) {} 3 - в onBindViewHolder инитить данные

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

Отправить комментарий