Android LinearLayout片段列表刷新

Android LinearLayout片段列表刷新,android,android-layout,android-fragments,android-linearlayout,Android,Android Layout,Android Fragments,Android Linearlayout,这是我的片段类。每一次“书记”职位的改变 我尝试了几种方法 触发整个活动的重新创建。由于庞大的列表(为片段填充200多个项目),这将导致几秒钟的延迟 我将使用findFragmentbyTag从主活动触发在该片段上找到的displayList 从mainActivity中删除所有childView并将其添加回 是否有任何其他解决方案(或上述解决方案中的哪一个)可以让我“立即”使用多个linearlayout快速高效地“刷新”此列表(片段) 再加上,我使用的是V4片段和从主活动使用PagerAda

这是我的片段类。每一次“书记”职位的改变

我尝试了几种方法

  • 触发整个活动的重新创建。由于庞大的列表(为片段填充200多个项目),这将导致几秒钟的延迟

  • 我将使用findFragmentbyTag从主活动触发在该片段上找到的displayList

  • 从mainActivity中删除所有childView并将其添加回

  • 是否有任何其他解决方案(或上述解决方案中的哪一个)可以让我“立即”使用多个linearlayout快速高效地“刷新”此列表(片段)

    再加上,我使用的是V4片段和从主活动使用PagerAdapter动态生成的片段。非常感谢

    public class EncounterFragment extends Fragment {
    
        ListView list;
        TextView eid;
        TextView eclerkship;
        TextView ename;
        TextView etype;
        TextView erequiredattempts;
    
    
        // DATABASE ADAPTOR
        private eAndPDbAdapter encounterDB;
        private Context myContext = getActivity();
    
        //arrayAdapter
        ListAdapter adapter;
        CheckBox cBox = null; 
    
        //Button Btngetdata;
        ArrayList<HashMap<String, String>> encountersList = new ArrayList<HashMap<String, String>>();
    
        //various layout
        ListView encounterList;
    
        static String value;
        private EditText filterText = null;
    
        private  Cursor mCursor; 
        private Cursor cCursor; 
    
        String clerkShip = "null"; 
    
    
    
        //JSON Node Names 
        private static final String TAG_ENCOUNTERS = "encounters";
        private static final String TAG_E_ID = "e_id";
        private static final String TAG_E_CLERKSHIP = "clerkship";
        private static final String TAG_E_NAME = "encounter_name";  
        private static final String TAG_E_TYPE = "type";
        private static final String TAG_E_REQUIRED_ATTEMPTS = "required_attempts";
    
        //JSONArray android = null;
    
    
        private List<String> nameList = new ArrayList(); 
        private List<String> idList = new ArrayList(); 
        private List<String> typeList = new ArrayList(); 
        private List<String> countList = new ArrayList(); 
        public  List encounterSelected = new ArrayList();   
    
    
        public static final String ARG_SECTION_NUMBER = "section_number";
    
        public EncounterFragment() {
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            myContext = getActivity();
    
            View rootView = inflater.inflate(R.layout.activity_encounter,
                    container, false);
    
               encountersList = new ArrayList<HashMap<String, String>>();
                displayList();
                LinearLayout parentLayout = (LinearLayout) rootView.findViewById(R.id.encounterslist);
    
    
                for(int i = 0 ; i<nameList.size();i++)
                {
                    View v = getLayoutInflater(savedInstanceState).inflate(R.layout.list_v, null);
                    final LinearLayout single = (LinearLayout) v.findViewById(R.id.listV);
                    single.setOnClickListener(new View.OnClickListener() {
    
                        @Override
                        public void onClick(View v) {
                            LinearLayout nestedLL  = (LinearLayout) single.getChildAt(1);
                            CheckBox cb = (CheckBox) nestedLL.getChildAt(0);
                            if(cb.isChecked())
                            {
                                cb.setChecked(false);
                                single.setBackgroundColor(Color.TRANSPARENT);
                            }
                            else
                            {
                                cb.setChecked(true);
                                single.setBackgroundColor(Color.rgb(255, 215, 0));;
                            }
                        }
                    });
                    TextView ID = (TextView) v.findViewById(R.id.eid);
                    TextView name = (TextView) v.findViewById(R.id.ename);
                    TextView count = (TextView) v.findViewById(R.id.eCount);
    
                    String nameValue = nameList.get(i).toString();
                    String IDValue = idList.get(i).toString();
                    String typeValue = typeList.get(i).toString(); 
                String countValue = countList.get(i).toString();
    
                    if (typeValue.equals("Must see"))
                    {
                        nameValue = nameValue + "**";
                    }
                    else
                    {
                        nameValue = nameValue + "*";
                    }
    
                    name.setText(nameValue);
                    ID.setText(IDValue);
                    count.setText(" (" + countValue + ")");
                    parentLayout.addView(v);
                }
    
    
    
            return rootView;
        }
    
        public void displayList()
        {
              displaySharedPreferences();
    
            encounterDB = new eAndPDbAdapter(myContext);
            encounterDB.open();
            mCursor = encounterDB.retrieveAllEncounterCursor(clerkShip);
            if ((mCursor != null) && (mCursor.getCount() > 0)) {
                mCursor.moveToFirst();
                {
                do {
                    String eID = mCursor.getString(1);
                    String encounter_name = mCursor.getString(3);
                    String encounter_type = mCursor.getString(4);
                    this.idList.add(eID);
                    this.nameList.add(encounter_name);
                    this.typeList.add(encounter_type);
                    //change to procedure if this is procedure 
                    cCursor = encounterDB.retrieveEncounterCounterBasedOnID(eID);
                    int count2 =cCursor.getCount();
                    if ((cCursor != null) && (count2 > 0)) {
                        cCursor.moveToFirst();
                        String NumCount = cCursor.getString(3);
                        this.countList.add(NumCount);
                    }
                    else
                    {
                        this.countList.add("0");
                    }
    
                }
    
                // move to the next row
                while (mCursor.moveToNext());
        }
            }
            encounterDB.close(); 
    
        }
    
    
    
    public void displaySharedPreferences() {
        SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(myContext);
    
        String listPrefs = prefs.getString("listpref", "No Clerkship Selected");
    
        StringBuilder builder2 = new StringBuilder();
        builder2.append(listPrefs);
    clerkShip = builder2.toString();
    }   
    }
    
    公共类遇到片段扩展片段{
    列表视图列表;
    文本视图eid;
    文本视图电子签名;
    文本视图名称;
    文本视图词组;
    TextView erequiredattempts;
    //数据库适配器
    私有EANDPDABadapter遇到b;
    私有上下文myContext=getActivity();
    //阵列适配器
    列表适配器;
    复选框cBox=null;
    //按钮Btngetdata;
    ArrayList encountersList=新建ArrayList();
    //各种布局
    ListView遭遇列表;
    静态字符串值;
    private EditText filterText=null;
    私有游标mCursor;
    私家侦探;
    字符串clerkShip=“null”;
    //JSON节点名称
    私有静态最终字符串标记_conferences=“conferences”;
    私有静态最终字符串TAG_E_ID=“E_ID”;
    私有静态最终字符串标记_E_CLERKSHIP=“CLERKSHIP”;
    私有静态最终字符串标记_E_NAME=“遭遇_NAME”;
    私有静态最终字符串TAG_E_TYPE=“TYPE”;
    私有静态最终字符串标记_E_REQUIRED_truments=“REQUIRED_truments”;
    //JSONArray-android=null;
    私有列表名称列表=新的ArrayList();
    private List idList=new ArrayList();
    私有列表类型列表=新的ArrayList();
    private List countList=new ArrayList();
    遇到的公共列表已选定=新建ArrayList();
    公共静态最终字符串ARG\u SECTION\u NUMBER=“SECTION\u NUMBER”;
    公众遭遇碎片(){
    }
    @凌驾
    创建视图上的公共视图(布局、充气机、视图组容器、,
    Bundle savedInstanceState){
    myContext=getActivity();
    视图根视图=充气机。充气(R.layout.activity\u),
    货柜(虚假);;
    encountersList=新建ArrayList();
    显示列表();
    LinearLayout parentLayout=(LinearLayout)rootView.findViewById(R.id.encounterslist);
    对于(int i=0;i 0)){
    mCursor.moveToFirst();
    {
    做{
    字符串eID=mCursor.getString(1);
    字符串名称=mCursor.getString(3);
    字符串类型=mCursor.getString(4);
    this.idList.add(eID);
    this.nameList.add(遭遇_name);
    this.typeList.add(遇到类型);
    //如果这是程序,请更改为程序
    cCursor=遇到B.retrieveEncounterCounterBasedOnID(eID);
    int count2=cCursor.getCount();
    如果((cCursor!=null)&&(count2>0)){
    cCursor.moveToFirst();
    String NumCount=cCursor.getString(3);
    this.countList.add(NumCount);
    }
    其他的
    {
    此.countList.add(“0”);
    }
    }
    //移到下一行
    while(mCursor.moveToNext());
    }
    }
    遇到b.close();
    }
    public void DisplaySharedReferences(){
    SharedReferences prefs=首选项管理器
    .GetDefaultSharedReferences(myContext);
    String listPrefs=prefs.getString(“listpref”,“未选择职员”);
    StringBuilder builder2=新的StringBuilder();
    builder2.append(listPrefs);
    clerkShip=builder2.toString();
    }   
    }
    
    是的,有一种方法,它很常用,我们通常称之为ListView。。。我是ListView+CursorAdapter(+ContentProvider),即使有4万行或更多行,我也没有问题……内存泄漏、ID回收、wtf?首先,我看到了循环中的问题,您从不关闭
    cCursor
    ,而是为
    mCursor
    中的每一行创建循环。。。带有适配器的复选框应以不同的方式使用。。。在检查时,您应该将项(而不是视图)的id存储在getView上的某些sparsearray id中。您应该检查位置id处的项是否曾经来自此数组,并最终选中此行的复选框(因为ListView正在重用视图)