2011-06-28 145 views
0

视图不会更新。我在哪里可以添加notifydatasetchanged();我想,这是我需要这样的列表视图得到更新Android notifydatasetchanged不更新?

public class UninstallActivity extends Activity { 
    private AppAdapter mAppListAdapter = null; 
    private EditText mEditText = null; 
    private ListView mListView = null; 





    public void update() { 
     // TODO 

     mAppListAdapter.clear(); 


     Intent aIntent = new Intent(Intent.ACTION_MAIN, null); 
     aIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

     PackageManager aPackageManager = getPackageManager(); 
     List <ResolveInfo> aList = aPackageManager.queryIntentActivities(aIntent, PackageManager.GET_UNINSTALLED_PACKAGES); 


     for(ResolveInfo rInfo : aList) { 
      if (!isSystemPackage(rInfo)) 
      mAppListAdapter.add(rInfo.activityInfo.applicationInfo); 


      System.out.println("Installed Applications " + rInfo.activityInfo.applicationInfo.loadLabel(aPackageManager).toString()); 
     } 




     if(mListView != null) { 
      mListView.setAdapter(mAppListAdapter); 

      } 

    } 






     private boolean isSystemPackage(ResolveInfo ri) { 
     return ((ri.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true : false; 

     } 

    public void remove(ApplicationInfo mApplicationInfo) { 

     Intent aIntent = new Intent(Intent.ACTION_DELETE, Uri.parse("package:" + mApplicationInfo.packageName)); 
     startActivity(aIntent); 
    } 






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

     setContentView(R.layout.main); 
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 



     mEditText = (EditText) findViewById(R.id.EditText); 
     mEditText.setSingleLine(); 
     mEditText.setImeOptions(EditorInfo.IME_ACTION_DONE); 
     mEditText.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       if(s.length() > 0) { 
        // TODO 
        mAppListAdapter.clear(); 




        Intent aIntent = new Intent(Intent.ACTION_MAIN, null); 
        aIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

        PackageManager aPackageManager = getPackageManager(); 
        List<ResolveInfo>aList = aPackageManager.queryIntentActivities(aIntent, PackageManager.GET_UNINSTALLED_PACKAGES); 

        for(ResolveInfo rInfo : aList) { 

         String aName = rInfo.activityInfo.applicationInfo.loadLabel(aPackageManager).toString().toLowerCase(); 
         String aValue = s.toString().toLowerCase(); 
         if (!isSystemPackage(rInfo)) 
         if(aName.contains(aValue)) { 
          mAppListAdapter.add(rInfo.activityInfo.applicationInfo); 

         } 
        } 

        if(mListView != null) { 
         mListView.setAdapter(mAppListAdapter); 


        } 
       } 
       else { 
        UninstallActivity.this.update(); 

       } 
      } 




      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      } 
      @Override 
      public void afterTextChanged(Editable s) { 
      } 
     }); 

     mListView = (ListView) findViewById(android.R.id.list); 
     mAppListAdapter = new AppAdapter(this); 


     this.update(); 

     mListView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       ApplicationInfo mApplicationInfo = (ApplicationInfo) mAppListAdapter.getItem(position); 
       UninstallActivity.this.remove(mApplicationInfo); 





      } 




     }); 
    } 

} 

回答

0

你永远设置适配器mlistview总是从我在你的代码看空。另外为什么你想要一次又一次地设置适配器?你应该刷新数据,并呼吁notifydatasetchanged

编辑:无法看到手机上的所有代码,现在看到你所有的代码:这是你需要做的。

在你的适配器中有一个adapterUpdate函数,它接受你的mAppListAdapter作为参数,用它来显示数据,基本上用传递给adapterUpdate函数的数据替换适配器所具有的数据,一旦完成,你可以调用notifyDatasetChanged在适配器本身来更新你的列表视图。

+0

这就是我想知道我在哪里设置和调用notifydatasetchanged? – user818610

相关问题