У меня есть фрагмент с ListView, в котором перечислены несистемные приложения, работающие в фоновом режиме.Я хочу, чтобы это обновлялось по мере запуска и закрытия новых приложений.Я не уверен, как бы я применил другие ответы, поэтому я решил спросить.
Основная активность
public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {
private final Fragment mTimerFragment = new TimerFragment();
private final Fragment mListFragment = new ListFragment();
private final Fragment mReminderFragment = new RemindFragment();
private Fragment mActiveFragment = mTimerFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportFragmentManager().beginTransaction()
.add(R.id.fragContainer, mReminderFragment, "TimerFragment")
.hide(mReminderFragment)
.commit();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragContainer, mListFragment, "ListFragment")
.hide(mListFragment)
.commit();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragContainer, mTimerFragment, "ReminderFragment")
.commit();
BottomNavigationView navigation = findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(this);
}
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
getSupportFragmentManager().beginTransaction()
.hide(mActiveFragment)
.show(mTimerFragment)
.commit();
mActiveFragment = mTimerFragment;
return true;
case R.id.navigation_dashboard:
getSupportFragmentManager().beginTransaction()
.hide(mActiveFragment)
.show(mListFragment)
.commit();
mActiveFragment = mListFragment;
return true;
case R.id.navigation_notifications:
getSupportFragmentManager().beginTransaction()
.hide(mActiveFragment)
.show(mReminderFragment)
.commit();
mActiveFragment = mReminderFragment;
return true;
}
return false;
}
}
Я использую нижнюю навигацию с тремяфрагменты.Фрагмент, о котором идет речь, такой:
Фрагмент
public class ListFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_list,null);
ListView list1 = (ListView)view.findViewById(R.id.listview1);
ActivityManager am = (ActivityManager)getActivity().getSystemService(Context.ACTIVITY_SERVICE);
PackageManager packageManager = getActivity().getPackageManager();
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses();
final String pnArr[] = new String[runningAppProcessInfo.size()];
List<String> filteredApps = new ArrayList<>();
List<String> filteredRunningApps = new ArrayList<>();
List<String> appNames = new ArrayList<>();
//user-apps loop
List<PackageInfo> apps = getActivity().getPackageManager().getInstalledPackages(0);
for (int i = 0; i < apps.size(); i++){
if ((apps.get(i).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 1){
filteredApps.add(apps.get(i).packageName);
}
}
//running apps + comparison loop
for (int i = 0; i < runningAppProcessInfo.size(); i++) {
pnArr[i] = runningAppProcessInfo.get(i).processName;
if (filteredApps.contains(runningAppProcessInfo.get(i).processName)) {
filteredRunningApps.add(runningAppProcessInfo.get(i).processName);
}
}
//package name -> app name conversion
for (int i = 0; i < filteredRunningApps.size();i++) {
ApplicationInfo ai = null;
try{
ai = packageManager.getApplicationInfo(filteredRunningApps.get(i),0);
}catch (PackageManager.NameNotFoundException e){}
String title = (String)((ai != null) ? packageManager.getApplicationLabel(ai) : "???");
appNames.add(title);
}
Toast.makeText(getActivity(), "Filtered Apps : " + filteredApps.size() + " | Running Apps : " + runningAppProcessInfo.size() + " | Filtered Running Apps : " + filteredRunningApps.size(), Toast.LENGTH_LONG).show();
ArrayList<String> pnList = new ArrayList<String>();
pnList.addAll(Arrays.asList(pnArr));
ArrayAdapter<String> aa = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,appNames);
list1.setAdapter(aa);
return view;
}
}
Сейчас он работает так, как получает список при запуске приложения, но так и остается.пока приложение не будет перезапущено и список не заполнится новыми значениями.Любая идея, как сделать его обновить, когда приложения в фоновом режиме закрыты / открыты?