package com.upTask.ut.uptask; import android.content.Context; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Adapter; import android.widget.BaseAdapter; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Timer; import java.util.TimerTask; /** * header也能修改,数据部分也能修改 */ public class ContactAdapter extends BaseAdapter { public final List<BaseAdapter> sections = new LinkedList<BaseAdapter>(); public final List<String> headers=new LinkedList<>(); public final static int TYPE_SECTION_HEADER = 0; private Context context; private LayoutInflater mInflater; public ContactAdapter(Context context) { this.context=context; mInflater = LayoutInflater.from(context); } public void addSection(String section, BaseAdapter adapter) { this.headers.add(section); this.sections.add(adapter); } public void insertSectionBefore(int i,String section, BaseAdapter adapter) { this.headers.add(i,section); this.sections.add(i,adapter); } public void replaceSectionData(int i, BaseAdapter adapter) { this.sections.remove(i); this.sections.add(i,adapter); } public void removeSection(int i) { this.sections.remove(i); this.headers.remove(i); } public void removeAllSections() { this.headers.clear(); this.sections.clear(); } public Object getItem(int position) { for (int i=0;i<sections.size();i++) { Adapter adapter = sections.get(i); String section = headers.get(i); int size = adapter.getCount(); if(!"".equals(section)){ size += 1; } // check if position inside this section if (position == 0&&!"".equals(section)) { return section; } if (position == 0){ return adapter.getItem(0); } if (position < size&&!"".equals(section)) { return adapter.getItem(position - 1); } if (position < size&&"".equals(section)) { return adapter.getItem(position); } // otherwise jump into next section position -= size; } return null; } public int getCount() { // total together all sections, plus one for each section header int total = 0; for (int i=0;i<sections.size();i++) { Adapter adapter = sections.get(i); String section = headers.get(i); total += adapter.getCount(); if(!"".equals(section)){ total += 1; } } return total; } @Override public int getViewTypeCount() { // assume that headers count as one, then total all sections return 4; } public int getItemViewType(int position) { if(position==getCount()-1){ return 3; } for (int i=0;i<sections.size();i++) { Adapter adapter = sections.get(i); String section = headers.get(i); int size = adapter.getCount(); if(!"".equals(section)){ size += 1; } // check if position inside this section if (position == 0&&!"".equals(section)) { return TYPE_SECTION_HEADER; } if(position == 0){ if(i==0){ return 1; }else{ return 2; } } if (position < size&&!"".equals(section)) { if(i==0){ return 1; }else{ return 2; } } if (position < size&&"".equals(section)) { if(i==0){ return 1; }else{ return 2; } } // otherwise jump into next section position -= size; } return -1; } public boolean areAllItemsSelectable() { return false; } public boolean isEnabled(int position) { return (getItemViewType(position) != TYPE_SECTION_HEADER); } @Override public void notifyDataSetChanged(){ for(BaseAdapter section:sections){ section.notifyDataSetChanged(); } super.notifyDataSetChanged(); } @Override public View getView(int position, View convertView, ViewGroup parent) { if(position==getCount()-1&&position>0){ return mInflater.inflate(R.layout.contact_list_footer, parent, false); } for (int i=0;i<sections.size();i++) { BaseAdapter secAdapter = sections.get(i); String section = headers.get(i); int size = secAdapter.getCount(); if(!"".equals(section)){ size += 1; } // check if position inside this section if (position == 0&&!"".equals(section)) { // List<HashMap<String,Object>>datas=new LinkedList<>(); // HashMap<String,Object>data=new HashMap<>(); // data.put("title",section); // datas.add(data); // return new SimpleAdapter(context,datas,R.layout.contact_list_header,new String[]{"title"},new int[]{R.id.contact_list_header_title}).getView(0,convertView,parent); View view = mInflater.inflate(R.layout.contact_list_header, parent, false); TextView title=view.findViewById(R.id.contact_list_header_title); title.setText(section); return view; } if(position == 0){ if(secAdapter.getCount()==0){ continue; } View view=secAdapter.getView(0, convertView, parent); setOnClickListener(view); return view; } if (position < size&&!"".equals(section)) { View view=secAdapter.getView(position - 1, convertView, parent); setOnClickListener(view); return view; } if (position < size&&"".equals(section)) { View view=secAdapter.getView(position, convertView, parent); setOnClickListener(view); return view; } // otherwise jump into next section position -= size; } return null; } private void setOnClickListener(View view){ TextView sec1Title=view.findViewById(R.id.contact_sec1_title); if(sec1Title!=null&&"添加好友".equals(sec1Title.getText())){ view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(view.getContext(),ChatActivity.class); view.getContext().startActivity(intent); } }); return; } if(sec1Title!=null&&"新建群组".equals(sec1Title.getText())){ view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(view.getContext(),ChatActivity.class); view.getContext().startActivity(intent); } }); return; } if(sec1Title!=null&&"好友请求".equals(sec1Title.getText())){ view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(view.getContext(),ChatActivity.class); view.getContext().startActivity(intent); } }); return; } final TextView friendId=view.findViewById(R.id.contact_sec2_friend_id); final TextView friendType=view.findViewById(R.id.contact_sec2_friend_type); final TextView sessionKey=view.findViewById(R.id.contact_sec2_session_key); if(friendId!=null){ Toast.makeText(context,"点击了通讯录中的好友",Toast.LENGTH_SHORT); view.setOnClickListener(new View.OnClickListener() { private boolean clicked=false; @Override public void onClick(View view) { if(clicked){ return; } clicked=true; Intent intent=new Intent(view.getContext(),ChatActivity.class); intent.putExtra("friendId",friendId.getText()); intent.putExtra("friendType",friendType.getText()); intent.putExtra("sessionKey",sessionKey.getText()); view.getContext().startActivity(intent); new Timer().schedule(new TimerTask() { @Override public void run() { clicked=false; } },1000); } }); return; } } @Override public long getItemId(int position) { return position; } }
带header的Adapter
最新推荐文章于 2022-08-12 14:12:07 发布