简体   繁体   English

Android展开式清单检视更新

[英]Android Expandable List View Update

I am implementing a chatting application, where I have made a service to listen all the presence changed. 我正在实现一个聊天应用程序,其中已提供了一项服务来侦听所有已更改的状态。 On the change of the presence I want to update the data and I am unable to update the data that is showing in the expandable list view. 更改状态后,我想更新数据,而无法更新可扩展列表视图中显示的数据。 Please suggest me a means to do the same. 请建议我采取同样的方法。

    public class UserMenuActivity extends ExpandableListActivity {

        private XMPPConnection connection;
        String name,availability,subscriptionStatus;
        TextView tv_Status;

        /** Variable Define here */
        private String[] data = { "View my profile", "New Multiperson Chat",
                "New Broad Cast Message", "New Contact Category", "New Group",
                "Invite to CCM", "Search", "Expand All", "Settings", "Help",
        "Close" };
        private String[] data_Contact = { "Rename Category","Move Contact to Category", "View my profile",
                "New Multiperson Chat", "New Broad Cast Message",
                "New Contact Category", "New Group", "Invite to CCM", "Search",
                "Expand All", "Settings", "Help", "Close" };
        private String[] data_child_contact = { "Open chat", "Delete Contact","View my profile",
                "New Multiperson Chat", "New Broad Cast Message",
                "New Contact Category", "New Group", "Invite to CCM", "Search",
                "Expand All", "Settings", "Help", "Close" };
        private String[] menuItem = { "Chats", "Contacts", "CGM Groups", "Pending","Request" };
        private List<String> menuItemList = Arrays.asList(menuItem);

        private int commonGroupPosition = 0;
        private String etAlertVal;
        private DatabaseHelper dbHelper;
        private int categoryID, listPos;
        /** New Code here.. */
        private ArrayList<String> groupNames;
        private ArrayList<ArrayList<ChildItems>> childs;
        private UserMenuAdapter adapter;
        private Object object;

        private String[] data2 = { "PIN Michelle", "IP Call" };
        private ListView mlist2;
        private ImageButton mimBtnMenu;
        private LinearLayout mllpopmenu;
        private View popupView;
        private PopupWindow popupWindow;
        private AlertDialog.Builder alert;
        private EditText input;
        private TextView mtvUserName, mtvUserTagLine;
        private ExpandableListView mExpandableListView;
        public static List<CategoryDataClass> categoryList;
        private boolean menuType = false;
        private String childValContact="";
        public static Context context;

        @Override
        public void onBackPressed() {
            if (mllpopmenu.getVisibility() == View.VISIBLE) {
                mllpopmenu.setVisibility(View.INVISIBLE);
            } else {
                if (CCMStaticVariable.CommonConnection.isConnected()) {
                    CCMStaticVariable.CommonConnection.disconnect();
                }
                super.onBackPressed();
            }
        }

        @SuppressWarnings("unchecked")
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_MENU) {
                if (mllpopmenu.getVisibility() == View.VISIBLE) {
                    mllpopmenu.setVisibility(View.INVISIBLE);
                } else {
                    if (commonGroupPosition >= 4 && menuType == true) {
                        if(childValContact == ""){
                            mllpopmenu.setVisibility(View.VISIBLE);

                            mlist2.setAdapter(new ArrayAdapter(UserMenuActivity.this,
                                    R.layout.listviewtext, R.id.tvMenuText,
                                    data_Contact));

                        }else{
                            mllpopmenu.setVisibility(View.VISIBLE);
                            mlist2.setAdapter(new ArrayAdapter(UserMenuActivity.this,
                                    R.layout.listviewtext, R.id.tvMenuText,
                                    data_child_contact));

                        }

                    } else if (commonGroupPosition == 0) {
                        mllpopmenu.setVisibility(View.VISIBLE);
                        mlist2.setAdapter(new ArrayAdapter(UserMenuActivity.this,
                                R.layout.listviewtext, R.id.tvMenuText, data));
                    }
                }
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }

        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            setContentView(R.layout.usermenulayout);
            dbHelper = new DatabaseHelper(UserMenuActivity.this);

            //this.context = context.getApplicationContext();

            XMPPConn.getContactList();

            connection = CCMStaticVariable.CommonConnection;


            Presence userPresence = new Presence(Presence.Type.available);
            userPresence.setPriority(24);
            userPresence.setMode(Presence.Mode.away);
            connection.sendPacket(userPresence);        


        }

        @Override
        protected void onResume() {
            super.onResume();       
            Presence userPresence = new Presence(Presence.Type.available);
            userPresence.setPriority(24);
            userPresence.setMode(Presence.Mode.away);
            connection.sendPacket(userPresence);
            XMPPConn.getContactList();
            setExpandableListView();
        }

        public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id) {

            if (groupPosition == 1 && childPosition == 0) {
                startActivity(new Intent(UserMenuActivity.this,
                        InvitetoCCMActivity.class));
            } else if (groupPosition == 1 && childPosition != 0) {
                Intent intent = new Intent(UserMenuActivity.this,
                        UserChatActivity.class);
                intent.putExtra("userNameVal",
                        XMPPConn.mfriendList.get(childPosition - 1).friendName);
                startActivity(intent);
            } else if (groupPosition == 2 && childPosition == 0) {
                startActivity(new Intent(UserMenuActivity.this,
                        CreateGroupActivity.class));
            } else if (groupPosition == 2 && childPosition != 0) {
                String GROUP_NAME = childs.get(groupPosition).get(childPosition)
                .getName().toString();
                int end = GROUP_NAME.indexOf("(");
                CCMStaticVariable.groupName = GROUP_NAME.substring(0, end).trim();
                startActivity(new Intent(UserMenuActivity.this,
                        GroupsActivity.class));
            } else if (groupPosition >= 4) {
                childValContact = childs.get(groupPosition).get(childPosition).getName().trim();
                showToast("user==>"+childValContact, 0);
            }
            return false;
        }

        private void setExpandableListView() {
            /***###############GROUP ARRAY ############################*/
            final ArrayList<String> groupNames = new ArrayList<String>();
            groupNames.add("Chats (2)");
            groupNames.add("Contacts (" + XMPPConn.mfriendList.size() + ")");
            groupNames.add("CGM Groups (" + XMPPConn.mGroupList.size() + ")");
            groupNames.add("Pending (1)");

            XMPPConn.getGroup();
            categoryList = dbHelper.getAllCategory();
            /**Group From Sever*/
            if (XMPPConn.mGroupList.size() > 0) {
                for (int g = 0; g < XMPPConn.mGroupList.size(); g++) {
                    XMPPConn.getGroupContact(XMPPConn.mGroupList.get(g).groupName);
                    groupNames.add(XMPPConn.mGroupList.get(g).groupName + "("
                            + XMPPConn.mGroupContactList.size()+ ")");
                }
            } 
            if(categoryList.size() > 0){
                for (int cat = 0; cat < categoryList.size(); cat++) {
                    groupNames.add(categoryList.get(cat).getCategoryName()+ "(0)");
                }
            }
            this.groupNames = groupNames;

            /*** ###########CHILD ARRAY * #################*/
            ArrayList<ArrayList<ChildItems>> childs = new ArrayList<ArrayList<ChildItems>>();

            ArrayList<ChildItems> child = new ArrayList<ChildItems>();
            child.add(new ChildItems("Alisha", "Hi",0));
            child.add(new ChildItems("Michelle", "Good Morning",0));

            childs.add(child);

            child = new ArrayList<ChildItems>();
            child.add(new ChildItems("", "",0));
            if (XMPPConn.mfriendList.size() > 0) {
                for (int n = 0; n < XMPPConn.mfriendList.size(); n++) {
                    child.add(new ChildItems(XMPPConn.mfriendList.get(n).friendNickName,
                            XMPPConn.mfriendList.get(n).friendStatus, 
                            XMPPConn.mfriendList.get(n).friendState));
                }
            }
            childs.add(child);
            /************** CGM Group Child here *********************/
            child = new ArrayList<ChildItems>();
            child.add(new ChildItems("", "",0));

            if (XMPPConn.mGroupList.size() > 0) {
                for (int grop = 0; grop < XMPPConn.mGroupList.size(); grop++) {
                    child.add(new ChildItems(
                            XMPPConn.mGroupList.get(grop).groupName + " ("
                            + XMPPConn.mGroupList.get(grop).groupUserCount
                            + ")", "",0));
                }
            }
            childs.add(child);

            child = new ArrayList<ChildItems>();
            child.add(new ChildItems("Shuchi",
                    "Pending (Waiting for Authorization)",0));
            childs.add(child);
            /************************ Group Contact List *************************/
            if (XMPPConn.mGroupList.size() > 0) {
                for (int g = 0; g < XMPPConn.mGroupList.size(); g++) {
                    /** Contact List */
                    XMPPConn.getGroupContact(XMPPConn.mGroupList.get(g).groupName);
                    child = new ArrayList<ChildItems>();
                    for (int con = 0; con < XMPPConn.mGroupContactList.size(); con++) {
                        child.add(new ChildItems(
                                XMPPConn.mGroupContactList.get(con).friendName,
                                XMPPConn.mGroupContactList.get(con).friendStatus,0));
                    }
                    childs.add(child);
                }
            } 
            if(categoryList.size() > 0){
                for (int cat = 0; cat < categoryList.size(); cat++) {
                    child = new ArrayList<ChildItems>();
                    child.add(new ChildItems("-none-", "",0));
                    childs.add(child);
                }
            }
            this.childs = childs;

            /** Set Adapter here */
            adapter = new UserMenuAdapter(this, groupNames, childs);
            setListAdapter(adapter);
            object = this;

            mlist2 = (ListView) findViewById(R.id.list2);
            mimBtnMenu = (ImageButton) findViewById(R.id.imBtnMenu);
            mllpopmenu = (LinearLayout) findViewById(R.id.llpopmenu);
            mtvUserName = (TextView) findViewById(R.id.tvUserName);
            mtvUserTagLine = (TextView) findViewById(R.id.tvUserTagLine);

            //Set User name..
            System.out.println("CCMStaticVariable.loginUserName==="
                    + CCMStaticVariable.loginUserName);
            if (!CCMStaticVariable.loginUserName.equalsIgnoreCase("")) {
                mtvUserName.setText("" + CCMStaticVariable.loginUserName);
            }
            /** Expandable List set here.. */
            mExpandableListView = (ExpandableListView) this
            .findViewById(android.R.id.list);
            mExpandableListView.setOnGroupClickListener(new OnGroupClickListener() {
                @Override
                public boolean onGroupClick(ExpandableListView parent, View v,
                        int groupPosition, long id) {

                    XMPPConn.getContactList();

                    if (parent.isGroupExpanded(groupPosition)) {
                        commonGroupPosition = 0;
                    }else{
                        commonGroupPosition = groupPosition;
                    }
                    String GROUP_NAME = groupNames.get(groupPosition);
                    int end = groupNames.get(groupPosition).indexOf("(");
                    String GROUP_NAME_VALUE = GROUP_NAME.substring(0, end).trim();
                    if (menuItemList.contains(GROUP_NAME_VALUE)) {
                        menuType = false;
                        CCMStaticVariable.groupCatName = GROUP_NAME_VALUE;
                    } else {
                        menuType = true;
                        CCMStaticVariable.groupCatName = GROUP_NAME_VALUE;
                    }
                    long findCatId = dbHelper.getCategoryID(GROUP_NAME_VALUE);
                    if (findCatId != 0) {
                        categoryID = (int) findCatId;
                    }
                    childValContact="";
                    showToast("Clicked on==" + GROUP_NAME_VALUE, 0);
                    return false;
                }
            });

            /** Click on item */
            mlist2.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int pos,long arg3) {
                    if (commonGroupPosition >= 4) {
                        if(childValContact == ""){
                            if (pos == 0) {
                                showAlertEdit(CCMStaticVariable.groupCatName);
                            }                   
                            /** Move contact to catgory */
                            if (pos == 1) {
                                startActivity(new Intent(UserMenuActivity.this,AddContactCategoryActivity.class));
                            }
                        }else{
                            if(pos == 0){
                                Intent intent = new Intent(UserMenuActivity.this,UserChatActivity.class);
                                intent.putExtra("userNameVal",childValContact);
                                startActivity(intent);
                            }
                            if(pos == 1){
                                XMPPConn.removeEntry(childValContact);
                                showToast("Contact deleted sucessfully", 0);
                                Intent intent = new Intent(UserMenuActivity.this,UserMenuActivity.class);
                            }
                        }

                    } else {
                        /** MyProfile */
                        if (pos == 0) {
                            startActivity(new Intent(UserMenuActivity.this,
                                    MyProfileActivity.class));
                        }
                        /** New multiperson chat start */
                        if (pos == 1) {
                            startActivity(new Intent(UserMenuActivity.this,
                                    NewMultipersonChatActivity.class));
                        }
                        /** New Broadcast message */
                        if (pos == 2) {
                            startActivity(new Intent(UserMenuActivity.this,
                                    NewBroadcastMessageActivity.class));
                        }
                        /** Click on add category */
                        if (pos == 3) {
                            showAlertAdd();
                        }
                        if (pos == 4) {
                            startActivity(new Intent(UserMenuActivity.this,
                                    CreateGroupActivity.class));
                        }

                        if (pos == 5) {
                            startActivity(new Intent(UserMenuActivity.this,
                                    InvitetoCCMActivity.class));
                        }
                        if (pos == 6) {
                            startActivity(new Intent(UserMenuActivity.this,
                                    SearchActivity.class));
                        }
                        if (pos == 7) {
                            onGroupExpand(2);
                            for (int i = 0; i < groupNames.size(); i++) {
                                mExpandableListView.expandGroup(i);
                            }
                        }
                        /** Click on settings */
                        if (pos == 8) {
                            startActivity(new Intent(UserMenuActivity.this,
                                    SettingsActivity.class));
                        }
                        if (pos == 10) {
                            System.exit(0);
                        }

                        if (pos == 14) {
                            if (mllpopmenu.getVisibility() == View.VISIBLE) {
                                mllpopmenu.setVisibility(View.INVISIBLE);
                                if (popupWindow.isShowing()) {
                                    popupWindow.dismiss();
                                }
                            } else {
                                mllpopmenu.setVisibility(View.VISIBLE);
                                mlist2.setAdapter(new ArrayAdapter(
                                        UserMenuActivity.this,
                                        R.layout.listviewtext, R.id.tvMenuText,
                                        data));
                            }
                        }
                    }
                }
            });
        }

        /** Toast message display here.. */
        private void showToast(String msg, int time) {
            Toast.makeText(this, msg, time).show();
        }

BroadcastReceiver UpdateList = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            Toast.makeText(UserMenuActivity.this, "CALLED", Toast.LENGTH_SHORT).show();
            adapter.notifyDataSetChanged();


        }
    };

        public String showSubscriptionStatus(String friend){
            return friend;


        }

    }

Service.class 服务类

    public class UpdaterService extends Service {
        private XMPPConnection connection;
        String Friend;
        String user = "";

        @Override
        public IBinder onBind(Intent arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public void onCreate() {
            // Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
            super.onCreate();
        }   

        @Override
        public void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
        }

        @Override
        public void onStart(Intent intent, int startId) {
            // TODO Auto-generated method stub
            showToast("My Service Started", 0);
            connection = getConnection();
            if (connection.isConnected()) {
                final Roster roster = connection.getRoster();
                RosterListener r1 = new RosterListener() {

                    @Override
                    public void presenceChanged(Presence presence) {
                        // TODO Auto-generated method stub
                        XMPPConn.getContactList();

                    }

                    @Override
                    public void entriesUpdated(Collection<String> arg0) {
                        // TODO Auto-generated method stub
                        //notification("entriesUpdated");
                    }

                    @Override
                    public void entriesDeleted(Collection<String> arg0) {
                        // TODO Auto-generated method stub
                        //notification("entriesDeleted");
                    }


                    @Override
                    public void entriesAdded(Collection<String> arg0) {
                        // TODO Auto-generated method stub
                        Iterator<String> it = arg0.iterator();
                        if (it.hasNext()) {
                            user = it.next();
                        }
                        RosterEntry entry = roster.getEntry(user);
                        if(entry.getType().toString().equalsIgnoreCase("to")){
                            int index_of_Alpha = Friend.indexOf("@");
                            String subID = Friend.substring(0, index_of_Alpha);

                            notification("Hi "+subID+" wants to add you");
                        }               
                    }
                };

                if (roster != null) {
                    roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
                    System.out.println("subscription going on");
                    roster.addRosterListener(r1);
                }

            } else {
                showToast("Connection lost-", 0);
            }
        }

        protected void showToast(String msg, int time) {
            Toast.makeText(this, msg, time).show();
        }

        private XMPPConnection getConnection() {
            return CCMStaticVariable.CommonConnection;
        }

        /** Notification manager */
        private void notification(CharSequence message) {

            String ns = Context.NOTIFICATION_SERVICE;
            NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
            int icon = R.drawable.ic_launcher;
            CharSequence tickerText = message;
            long when = System.currentTimeMillis();
            Notification notification = new Notification(icon, tickerText, when);
            Context context = getApplicationContext();



            CharSequence contentTitle = "CCM";
            CharSequence contentText = message;
            Intent notificationIntent = new Intent(this, ManageNotification.class);
            notificationIntent.putExtra("Subscriber_ID",user );

            PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                    notificationIntent, 0);
            notification.setLatestEventInfo(context, contentTitle, contentText,
                    contentIntent);
            notification.flags |= Notification.FLAG_AUTO_CANCEL;
            final int HELLO_ID = 1;
            mNotificationManager.notify(HELLO_ID, notification);

        }

}

Here is my adapter class 这是我的适配器类

public class UserMenuAdapter extends BaseExpandableListAdapter {

    private ArrayList<String> groups;
    private ArrayList<ArrayList<ChildItems>> childs;
    private Context context;
    public LayoutInflater inflater;

    ImageView img_availabiliy;

    private static final int[] EMPTY_STATE_SET = {};
    private static final int[] GROUP_EXPANDED_STATE_SET =
            {android.R.attr.state_expanded};
    private static final int[][] GROUP_STATE_SETS = {
         EMPTY_STATE_SET, // 0
         GROUP_EXPANDED_STATE_SET // 1
    };

    public UserMenuAdapter(Context context, ArrayList<String> groups,
            ArrayList<ArrayList<ChildItems>> childs) {
        this.context = context;
        this.groups = groups;
        this.childs = childs;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return childs.get(groupPosition).get(childPosition);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return (long) (groupPosition * 1024 + childPosition);
    }

    @Override
    public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
        View v = null;
        if (convertView != null)
            v = convertView;
        else
            v = inflater.inflate(R.layout.child_layout, parent, false);
        ChildItems ci = (ChildItems) getChild(groupPosition, childPosition);
        TextView tv = (TextView) v.findViewById(R.id.tvChild);
        tv.setText(ci.getName());
        TextView tv2 = (TextView) v.findViewById(R.id.tvChild2);
        tv2.setText(ci.getDailyStatus());
        img_availabiliy = (ImageView)v.findViewById(R.id.img_childlayout_AVAILABILITY);
        ImageView friendPics = (ImageView)v.findViewById(R.id.ivFriendPics);


        if(ci.getStatusState() == 1){
            img_availabiliy.setImageResource(R.drawable.online);
        }
        else if(ci.getStatusState()==0){
            img_availabiliy.setImageResource(R.drawable.offline);           
        }           
        else if (ci.getStatusState()==2) {
            img_availabiliy.setImageResource(R.drawable.away);
        }       
        else if(ci.getStatusState()==3){
            img_availabiliy.setImageResource(R.drawable.busy);
        }
        else{
            img_availabiliy.setImageDrawable(null);
        }       
        if((groupPosition == 1 && childPosition == 0)){
            friendPics.setImageResource(R.drawable.inviteto_ccm);
            img_availabiliy.setVisibility(View.INVISIBLE);
        }
        else if(groupPosition == 2 && childPosition == 0){
            friendPics.setImageResource(R.drawable.new_ccmgroup);
            img_availabiliy.setVisibility(View.VISIBLE);            
        }else{
            if(ci.getPicture()!= null){
                Bitmap bitmap = BitmapFactory.decodeByteArray(ci.getPicture(), 0, ci.getPicture().length);
                bitmap = Bitmap.createScaledBitmap(bitmap, 50, 50, true);
                friendPics.setImageBitmap(bitmap);
            }else{
                friendPics.setImageResource(R.drawable.avatar);
            }

            img_availabiliy.setVisibility(View.VISIBLE);
        }
        return v;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return childs.get(groupPosition).size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groups.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return groups.size();
    }

    @Override
    public long getGroupId(int groupPosition) {
        return (long) (groupPosition * 1024); 
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        View v = null;
        if (convertView != null)
            v = convertView;
        else
            v = inflater.inflate(R.layout.group_layout, parent, false);
        String gt = (String) getGroup(groupPosition);
        TextView tv2 = (TextView) v.findViewById(R.id.tvGroup);
        if (gt != null)
            tv2.setText(gt);
        /**Set Image on group layout, Max/min*/
        View ind = v.findViewById( R.id.explist_indicator);
        View groupInd = v.findViewById( R.id.llgroup);
        if( ind != null ) {
            ImageView indicator = (ImageView)ind;           
            if( getChildrenCount( groupPosition ) == 0 ) {
                indicator.setVisibility( View.INVISIBLE );
            } else {
                indicator.setVisibility( View.VISIBLE );
                int stateSetIndex = ( isExpanded ? 1 : 0) ;
                Drawable drawable = indicator.getDrawable();
                drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
            }
        }
        if( groupInd != null ) {
            RelativeLayout indicator2 = (RelativeLayout)groupInd;
            if( getChildrenCount( groupPosition ) == 0 ) {
                indicator2.setVisibility( View.INVISIBLE );             
            } else {
                indicator2.setVisibility( View.VISIBLE );
                int stateSetIndex = ( isExpanded ? 1 : 0) ;
                Drawable drawable2 = indicator2.getBackground();                
                drawable2.setState(GROUP_STATE_SETS[stateSetIndex]);
            }
        }
        return v;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    public void onGroupCollapsed(int groupPosition) {
    }

    public void onGroupExpanded(int groupPosition) {
    }

}

I just want to update my list in ON PRESENCE CHANGED method in the Service class.. Please suggest me a means to do the same. 我只想在Service类的ON PRESENCE CHANGED方法中更新我的列表。.请建议我这样做的一种方法。

Try to use 尝试使用

listView.notifyDataSetChanged() listView.notifyDataSetChanged()

What you can do is, 你能做的是

You can use BroadCastReceiver , Interface or ResultReceiver 您可以使用BroadCastReceiver ,Interface或ResultReceiver

For ResultReceiver you can check a demo from my github here . 对于ResultReceiver您可以检查从我的github上演示here

Create a BroadCastReceiver and register it in your Activity . 创建一个BroadCastReceiver并将其注册到您的Activity Then from presenceChanged() method in your Service you can fire that BroadCastReceiver and update your ExpandableListView in your Activity where you have implemented the BroadCastReceiver using expandlistView.notifyDataSetChanged() 然后从presenceChanged()在你的方法Service ,你可以大火, BroadCastReceiver和更新ExpandableListView在你的活动,你已经实现了BroadCastReceiver使用expandlistView.notifyDataSetChanged()

In Activity, 在活动中,

public static final String ACTION_UPDATE = "ACTION_UPDATE";

BroadcastReceiver UpdateListsReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            adapter.notifyDataSetChanged();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ......
        registerReceiver(finishActivitiesReceiver, 
                                            new IntentFilter(ACTION_UPDATE));
    }

In your Service, 为您服务

     @Override
     public void presenceChanged(Presence presence) {
           XMPPConn.getContactList();
           sendBroadcast(new Intent(Activity_Name.ACTION_UPDATE));
     }

Also, don't forget to unregister your BroadCastReciever in onDestroy() or onPause() using 另外,不要忘记使用onDestroy()onPause()取消注册BroadCastReciever。

unregisterReceiver(UpdateListsReceiver);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM