我设法更改了我的ListView
项目位置,但在关闭我的应用后,该位置会回到我做出任何更改之前。
我如何保存项目的安排位置?
填充ListView
String[] SavedFiles;
String dataDr;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_address);
dataDr = getApplicationInfo().dataDir;
showDirFile(dataDr);
}
void showDirFile(String dirpth)
{
String path = dirpth+"/files";
Log.d("Files", "Path: " + path);
File f = new File(path);
File file[] = f.listFiles();
Log.d("Files", "Size: "+ file.length);
SavedFiles = new String[file.length];
for (int i=0; i < file.length; i++)
{
Log.d("Files", "FileName:" + file[i].getName());
SavedFiles[i] = file[i].getName();
}
ArrayAdapter<String> adapter
= new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
SavedFiles);
listView.setAdapter(adapter);
}
更改项目位置并将其保存为Array
Collections collections;
void positionChange(){
//to store arrays into ArrayList
List<String> newList = new ArrayList<String>(Arrays.asList(myDataFiles));
//to get the item's position @ get the first item in array if multiple arrays exist
String currentPos = String.valueOf(intArrayList.get(0));
int oldPos = Integer.valueOf(currentPos);
int newPos = oldPos-1;
//Swap position @ move up list
collections.swap(newList, oldPos, newPos);
//store ArrayList data into arrays
myDataFiles = newList.toArray(myDataFiles);
intArrayList.clear();
adapter.notifyDataSetChanged();
}
修改
请注意Array
中的项目是从dataDr = getApplicationInfo().dataDir;
也许我需要找到一种方法来保存我目录中的排列位置?
答案 0 :(得分:1)
正如我在评论中已经提到的那样,SharedPreferences
可以解决问题。使用onCreate
方法初始化它。
// use member variable for this (private SharedPreferences prefs)
prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
由于商品的位置可能会发生变化,因此最好存储文件名而不是位置。这个的好地方可能是onItemSelected
(因此你必须在你的列表视图中添加一个监听器)。
listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
prefs.edit().putString("yourKey", listView.getItemAtPosition(position)).apply();
}
});
要在启动应用程序后设置正确的位置,您必须在SavedFile
对象中获取文件的位置。
从SharedPreferences
加载字符串:
String fileName = prefs.getString("yourKey", "");
初始化listview和适配器后,只需遍历列表并比较字符串。如果字符串匹配,则取位置并将其设置为listview对象。
for(int i = 0; i < SavedFiles.length; i++){
if(fileName.equals(SavedFiles[i])){
listview.setSelection(i);
break;
}
}