向上滚动时在可扩展列表视图中进行更改

时间:2011-11-16 17:41:45

标签: android

我在我的应用程序中使用可扩展列表,我的问题是当我在列表中向上和向下滚动,视图发生变化时,请告诉我如何解决此问题

谢谢, 萨姆。

下面是代码

package com.test.android;

import java.util.ArrayList;
import java.util.Random;

import android.app.ExpandableListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ExpandableListAdapter;
import android.widget.TextView;

/**
 * Demonstrates expandable lists using a custom {@link ExpandableListAdapter}
 * from {@link BaseExpandableListAdapter}.
 */
public class ExpandableList1 extends ExpandableListActivity {

    MyExpandableListAdapter mAdapter;

    ProgressDialog progressDialog;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set up our adapter
        mAdapter = new MyExpandableListAdapter(this);
        setListAdapter(mAdapter);
    }


    /**
     * A simple adapter which maintains an ArrayList of photo resource Ids. 
     * Each photo is displayed as an image. This adapter supports clearing the
     * list of photos and adding a new photo.
     *
     */

    private Handler actionhandler = new Handler(){

        /* (non-Javadoc)
         * @see android.os.Handler#handleMessage(android.os.Message)
         */
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            mAdapter.notifyDataSetChanged();
            progressDialog.dismiss();
        }

    };

    public class MyExpandableListAdapter extends BaseExpandableListAdapter {

        private ArrayList<String> groups = new ArrayList<String>();
        private ArrayList<ArrayList<String>> children = new ArrayList<ArrayList<String>>();
        private Context context;

        public MyExpandableListAdapter(Context context) {
            super();
            this.context = context;
            groups.add("People Names");
            groups.add("Dog Names"); 
            groups.add("Cat Names");
            groups.add("Fish Names");

            ArrayList<String> child1 = new ArrayList<String>();
            child1.add("Arnold-1");
            child1.add("Barry-2"); 
            child1.add("Chuck-3");
            child1.add("David-4");
            child1.add("Arnold-5");
            child1.add("Barry-6"); 
            child1.add("Chuck-7");
            child1.add("David-8");
            child1.add("Arnold-9");
            child1.add("Barry-10"); 
            child1.add("Chuck-11");
            child1.add("David-12");
            child1.add("Arnold-13");
            child1.add("Barry-14"); 
            child1.add("Chuck-15");
            child1.add("David-16");
            children.add(child1);

            ArrayList<String> child2 = new ArrayList<String>();
            child2.add("Ace-17");
            child2.add("Bandit-18"); 
            child2.add("Cha-Cha-19");
            child2.add("Deuce-20");
            children.add(child2);

            ArrayList<String> child3 = new ArrayList<String>();
            child3.add("Fluffy-21");
            child3.add("Snuggles-22"); 
            child3.add("Fluffy-23");
            child3.add("Snuggles-24"); 
            child3.add("Fluffy-25");
            child3.add("Snuggles-26"); 
            child3.add("Fluffy-27");
            child3.add("Snuggles-28"); 
            child3.add("Fluffy-29");
            child3.add("Snuggles-30"); 
            child3.add("Fluffy-31");
            child3.add("Snuggles-32"); 
            child3.add("Fluffy-33");
            child3.add("Snuggles-34"); 

            children.add(child3);

            ArrayList<String> child4 = new ArrayList<String>();
            child4.add("Goldy-35");
            child4.add("Bubbles-36");
            child4.add("dummy-37");
            child4.add("Goldy-38");
            child4.add("Bubbles-39");
            child4.add("dummy-40");
            child4.add("Goldy-41");
            child4.add("Bubbles-42");
            child4.add("dummy-43");

            child4.add("Goldy-44");
            child4.add("Bubbles-45");
            child4.add("dummy-46");

            child4.add("Goldy-47");
            child4.add("Bubbles-48");
            child4.add("dummy-49");
            children.add(child4);

        }

        public Object getChild(int groupPosition, int childPosition) {
            return children.get(groupPosition).get(childPosition);
        }

        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }

        public int getChildrenCount(int groupPosition) {
            //if childern not avaibles.
            return children.get(groupPosition).size();
        }

        private void getMoreData(int groupPosition, int childPosition){
            Log.e("getMoreData", "calling groupPosition:"+groupPosition +"|childPosition:"+childPosition);

            //remove the dummay record
            children.get(groupPosition).remove(childPosition);

            //adding a new group with data.
            Random randomGenerator = new Random();
            int count = randomGenerator.nextInt(100);

            groups.add("More Data:" + count);
            ArrayList<String> newData = new ArrayList<String>();
            newData.add("Arnold"+count);
            newData.add("Barry"+ count); 
            newData.add("Chuck"+ count);
            newData.add("David"+ count);
            children.add(newData);

            //removing a record from exssitng group.
            children.get(0).remove(0);
            children.get(0).add("add to group0 shaggy");

            //adding a record to group
            children.get(1).add("shaggy add to group 2 shaggy");

            //remove a groiup and corresponding childrens
            groups.remove(2);
            children.remove(2);

            //adding a new record to last group.
            children.get(groups.size()-1).add("new record");
            //adding a dummy record to last group.
            children.get(groups.size()-1).add("dummy");

        }




        public TextView getGenericView() {

            // Layout parameters for the ExpandableListView
            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
                    ViewGroup.LayoutParams.FILL_PARENT, 64);

            TextView textView = new TextView(ExpandableList1.this);
            textView.setLayoutParams(lp);
            // Center the text vertically
            textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
            // Set the text starting position
            textView.setPadding(36, 0, 0, 0);
            return textView;
        }

        public Button getGenericButton(final int groupPosition,final int childPosition) {
            // Layout parameters for the ExpandableListView
            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
                    ViewGroup.LayoutParams.FILL_PARENT, 64);

            Button button = new Button(ExpandableList1.this);
            button.setText("More");
            button.setLayoutParams(lp);
            button.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    progressDialog =  ProgressDialog.show(context, null, "Please Wait");
                    new Thread(){
                        /* (non-Javadoc)
                         * @see java.lang.Thread#run()
                         */
                        @Override
                        public void run() {
                            getMoreData(groupPosition,childPosition);
                            try {
                                Thread.sleep(5000);
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            actionhandler.sendEmptyMessage(0);
                        }

                    }.start();
                }
            });
            // Center the text vertically
            button.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
            // Set the text starting position
            button.setPadding(36, 0, 0, 0);
            return button;
        }


        public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild,
                View convertView, ViewGroup parent) {

            Log.e("getChildView", groupPosition + "===" +groups.size());  

            if(convertView == null){
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.chilldlayout_data, null);
               // parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
            }   




            if( groupPosition == groups.size()-1 && isLastChild){
                //adding a button.
                Button button  =  (Button)convertView.findViewById(R.id.more_button);
                button.setVisibility(View.VISIBLE);
                button.setText("More");
                button.setOnClickListener(new OnClickListener() {

                    public void onClick(View v) {
                        progressDialog =  ProgressDialog.show(context, null, "Please Wait");
                        new Thread(){
                            /* (non-Javadoc)
                             * @see java.lang.Thread#run()
                             */
                            @Override
                            public void run() {
                                getMoreData(groupPosition,childPosition);
                                try {
                                    Thread.sleep(5000);
                                } catch (InterruptedException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                                actionhandler.sendEmptyMessage(0);
                            }

                        }.start();
                    }
                });
                // Center the text vertically
                button.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
                // Set the text starting position
                button.setPadding(36, 0, 0, 0);
                return convertView;
            }else{
                Button button  =  (Button)convertView.findViewById(R.id.more_button);
                button.setVisibility(View.GONE);

                TextView textView =  (TextView)convertView.findViewById(R.id.textView_data);
                 textView.setText(getChild(groupPosition, childPosition).toString());
                return convertView;
            }
        }

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

        public int getGroupCount() {
            return groups.size();
        }
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }

        public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                ViewGroup parent) {
            TextView textView = getGenericView();
            textView.setText(getGroup(groupPosition).toString());
            return textView;

        }

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

        public boolean hasStableIds() {
            return true;
        }

    }
}

0 个答案:

没有答案