启用setTextFilterEnabled时如何在listview中获取正确的位置?

时间:2016-04-18 02:13:56

标签: android listview filter

当我点击其中的一个项目时,我正试图在列表视图中获得正确的位置。我启用了setTextFilterEnabled。这是我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

.....

//get files
    getfile(root);

adapter = (new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mylist));
    listView = (ListView) findViewById(R.id.view);
    listView.setAdapter(adapter);
    listView.setTextFilterEnabled(true);

.....

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            String pdfPath = Environment.getExternalStorageDirectory() + fileList.get(position).getName();


            Intent intent = new Intent(MainActivity.this, NextActivity.class);
intent.putExtra("location_of_file", pdfPath);
            startActivity(intent);

        }
    });


.....

这是我的ArrayList获取文件

public ArrayList<File> getfile(File dir) {
    File listFile[] = dir.listFiles();
    if (listFile != null && listFile.length > 0) {
        for (int i = 0; i < listFile.length; i++) {

            if (listFile[i].isDirectory()) {
                fileList.add(listFile[i]);
                getfile(listFile[i]);
            } else {
                if (listFile[i].getName().endsWith(".pdf"))

                {
                    fileList.add(listFile[i]);
                }
            }
        }
    }
    return fileList;
}

这是使用过滤的地方

private TextWatcher filterTextWatcher = new TextWatcher() {

    public void afterTextChanged(Editable s) {
    }

    public void beforeTextChanged(CharSequence s, int start, int count,
                                  int after) {
    }

    public void onTextChanged(CharSequence s, int start, int before,
                              int count) {
        adapter.getFilter().filter(s);
        listView.setVisibility(View.INVISIBLE); //when input text is changed hide list
    }

};

在我的listview onClickListener中,它总是给我错误的位置并得到错误的文件路径。

请帮忙。谢谢。

2 个答案:

答案 0 :(得分:1)

替换String pdfPath = Environment.getExternalStorageDirectory() + fileList.get(position).getName();

使用String pdfPath = Environment.getExternalStorageDirectory() + ((File)parent.getAdapter().getItem(position)).getName();

取自https://stackoverflow.com/a/19926676/3977935

答案 1 :(得分:0)

这是基于Mike对我的问题的评论。

改变

fileList.get(position).getName()

parent.getAdapter().getItem(position);

我是从valign

得到的