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
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正在重用视图)