【问题标题】:How to get the correct position in listview when setTextFilterEnabled is enable? [duplicate]启用 setTextFilterEnabled 时如何在列表视图中获得正确的位置? [复制]
【发布时间】:2016-04-18 10:40:46
【问题描述】:

当我单击一个项目时,我试图在列表视图中获得正确的位置。我启用了 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
    }

};

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

请帮忙。谢谢你。

【问题讨论】:

  • 非常感谢@MikeM。 !
  • 没问题。如果该帖子回答了您的问题,您应该能够将其标记为有助于结束您的问题。干杯!

标签: android listview filter


【解决方案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

【讨论】:

  • 我不能在 getItem() 中使用.getName()。
  • @KairiSan 更新了我的答案。立即查看
  • 当我单击一个项目时,我的应用程序崩溃了。 :(
  • @KairiSan 在没有看到堆栈跟踪的情况下无法提供帮助
【解决方案2】:

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

改变了

fileList.get(position).getName()

到

parent.getAdapter().getItem(position);

我从here得到它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2018-02-02
    相关资源
    最近更新 更多