0

Это то, что я получил от общей предпочтительности, (Android) Общий Предпочтение: Как я могу отфильтровать список с результатом, полученным от общего предпочтения

ApplicationInfo{1622e954 com.example.user.example},ApplicationInfo{1aed20fd com.example.browhistlog}

Любая идея, что шестнадцатеричное речь? Можно ли отфильтровать список в приложении 2 на основе информации, которую я получил? Если возможно, что я могу сделать для достижения этого (любые ссылки)?

enter image description here
;

ListView myList; 
Button getChoice, clearAll, selectAll; 
SharedPreferences sharedpreferences; 
public static final String MyPREFERENCES = "MyUserChoice" ; 
ArrayList<String> selectedItems = new ArrayList<String>();  
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myList = (ListView)findViewById(android.R.id.list); 
    getChoice = (Button)findViewById(R.id.getchoice); 
    clearAll = (Button)findViewById(R.id.clearall); 
    selectAll = (Button)findViewById(R.id.selectall); 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice); 
    myList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
    myList.setAdapter(adapter); 
    sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 
    if(sharedpreferences.contains(MyPREFERENCES)){ 
     LoadSelections(); 
    } 

    getChoice.setOnClickListener(new Button.OnClickListener() { 


     @Override 
     public void onClick(View v) { 

      String selected = ""; 
      int cntChoice = myList.getCount(); 

      SparseBooleanArray sparseBooleanArray = myList.getCheckedItemPositions(); 
      for (int i = 0; i < cntChoice; i++) { 
       if (sparseBooleanArray.get(i)) { 
        selected += myList.getItemAtPosition(i).toString() + "\n"; 
        System.out.println("Checking list while adding:" + myList.getItemAtPosition(i).toString()); 
        SaveSelections(); 
       } 

      } 

      Toast.makeText(MainActivity.this, selected, Toast.LENGTH_LONG).show(); 

     } 
    }); 

    clearAll.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      ClearSelections(); 
     } 
    }); 

    selectAll.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      SelectAllSelections(); 
     } 
    }); 

    packageManager = getPackageManager(); 

    new LoadApplications().execute(); 
    } 
private void SaveSelections() { 
// save the selections in the shared preference in private mode for the user 

    SharedPreferences.Editor prefEditor = sharedpreferences.edit(); 
    String savedItems = getSavedItems(); 
    prefEditor.putString(MyPREFERENCES.toString(), savedItems); 
    prefEditor.commit(); 
} 

private String getSavedItems() { 
    String savedItems = ""; 
    int count = this.myList.getAdapter().getCount(); 
    for (int i = 0; i < count; i++) { 
     if (this.myList.isItemChecked(i)) { 
      if (savedItems.length() > 0) { 
       savedItems += "," + this.myList.getItemAtPosition(i); 
      } else { 
       savedItems += this.myList.getItemAtPosition(i); 
      } 
     } 
    } 
    return savedItems; 
} 

private void LoadSelections() { 
// if the selections were previously saved load them 

    if (sharedpreferences.contains(MyPREFERENCES.toString())) { 

     String savedItems = sharedpreferences.getString(MyPREFERENCES.toString(), ""); 
     selectedItems.addAll(Arrays.asList(savedItems.split(","))); 

     int count = this.myList.getAdapter().getCount(); 

     for (int i = 0; i < count; i++) { 
      String currentItem = (String) myList.getAdapter() 
        .getItem(i); 
      if (selectedItems.contains(currentItem)) { 
       myList.setItemChecked(i, true); 
       Toast.makeText(getApplicationContext(), 
         "Current Item: " + currentItem, 
         Toast.LENGTH_LONG).show(); 
      } else { 
       myList.setItemChecked(i, false); 
      } 

     } 
    } 
} 

private void ClearSelections() { 
// user has clicked clear button so uncheck all the items 
    int count = this.myList.getAdapter().getCount(); 
    for (int i = 0; i < count; i++) { 
     this.myList.setItemChecked(i, false); 
    } 
// also clear the saved selections 
    SaveSelections(); 
} 

private void SelectAllSelections() { 
// user has clicked clear button so uncheck all the items 
    int count = this.myList.getAdapter().getCount(); 
    for (int i = 0; i < count; i++) { 
     this.myList.setItemChecked(i, true); 
    } 
// also clear the saved selections then uncomment the below line. 
// SaveSelections(); 
} 

protected void onListItemClick(ListView l, View v, int position, long id){ 
    super.onListItemClick(l, v, position, id); 

    ApplicationInfo app = applist.get(position); 

    try{ 
     Intent intent = packageManager.getLaunchIntentForPackage(app.packageName); 

     /*if(intent != null){ 
      startActivity(intent); 
     }*/ 
    }catch(ActivityNotFoundException e){ 
     Toast.makeText(MainActivity.this,e.getMessage(), Toast.LENGTH_LONG).show(); 
    }catch(Exception e){ 
     Toast.makeText(MainActivity.this,e.getMessage(), Toast.LENGTH_LONG).show(); 
    } 
} 

private List<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list){ 
    ArrayList<ApplicationInfo> appList = new ArrayList<ApplicationInfo>(); 
    for(ApplicationInfo info : list){ 
     try{ 
      if(packageManager.getLaunchIntentForPackage(info.packageName)!=null){ 
       appList.add(info); 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
    return appList; 
} 

private class LoadApplications extends AsyncTask<Void, Void, Void>{ 
    private ProgressDialog progress = null; 

    protected Void doInBackground(Void... params){ 
     applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA)); 
     listadapter = new AppAdapter(MainActivity.this, R.layout.activity_list_app, applist); 
     return null; 
    } 
    protected void onPostExecute(Void result){ 
     setListAdapter(listadapter); 
     progress.dismiss(); 
     super.onPostExecute(result); 
    } 
    protected void onPreExecute(){ 
     progress = ProgressDialog.show(MainActivity.this, null, "Loading apps info..."); 
     super.onPreExecute(); 
    } 
} 
} 
+0

Показать свой код. Обычно вы берете известные данные из общих настроек. Вы извлекаете String, double, int и так далее. – shadox

+0

Вы знаете, как структурируются ваши общие настройки? Это вы пишете эти данные или выполняете какой-то другой процесс? – shadox

+0

На самом деле я сделал ссылку на это http://www.geeks.gallery/multiple-checkbox-values-in-listview-storing-retrieving-using-sharedpreferences/. – Dave

ответ

0

В вашем случае я бы использовал DataBase вместо SharedPreferences, но если вы предпочитаете это в любом случае я хотел бы использовать другой подход. Перейдите в свой список и сохраните каждую строку отдельно, с некоторым индексом.

int i = 0; 
sharedPreferences.putInt("list_size", selectedItems.size()); 
for(String s: selectedItems) { 
    sharedPreferences.putString("item_" + i,); 
    i++; 
} 

То же самое для чтения

int readSize = sharedPreferences.getInt("list_size", 0); 
for(int i = 0; i < readSize; i++) { 
    myList.add(sharedPreferences.getString("item_" + 1, null); 
} 

Это может быть решением для строки. Если у вас есть объекты, рассмотрите DataBase или сериализацию событий в файле.

P.S. То, что вы читаете при сохранении всего списка, - это своего рода внутренний хэш-индекс. Таким образом, вы сохраняете представление списка, созданного функцией toString(). Это не обязательно правильное представление.

+0

Спасибо, иншадор. Я дам ему попробовать. – Dave

+0

Подумайте о том, чтобы отметить это как ответ, если он работает на вас. – shadox