listview提升项目位置

时间:2016-09-01 03:12:11

标签: java android file listview

我正试图通过按下一个按钮来移动项目在ListView上的位置,该按钮将向上移动一行列表。我尝试在SO上寻找其他答案,但他们的ListView填充了来自ArrayList

的我fileList()

我是否需要以某种方式对fileList()中的文件进行排序?或者使用ArrayList足以让我改变立场?

我使用ArrayList来获取商品的位置

我如何填充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);
}

我如何得到物品的位置

OnItemClickListener getFileEditContent = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // Get item's file name according to position
        String clickedFile = (String)parent.getItemAtPosition(position);
        stringArrayList.add(clickedFile)

        //  Get item position
        intArrayList.add(position);

    }
};

2 个答案:

答案 0 :(得分:0)

您已使用String[] SavedFiles;使用适配器显示列表。

单击要将其移动的项目,以便交换数组项目并通知适配器的写入逻辑。

您的逻辑将使顶部项目为当前项目,当前项目为前一项。

希望这会对你有所帮助。

答案 1 :(得分:0)

我设法使用Collections.swap方法

自行解决

实施例

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();
}

这将使我们选择的项目向上移动,它将无法保存状态。这意味着ListView上显示的项目位置将恢复到关闭应用程序时的状态