2016-04-18 1 views
1

Ich versuche, die richtige Position in der ListView zu erhalten, wenn ich ein Element darauf angeklickt habe. Ich aktiviere die setTextFilterEnabled. Hier ist mein CodeWie bekomme ich die richtige Position in der Listenansicht, wenn setTextFilterEnabled aktiviert ist?

@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); 

     } 
    }); 


..... 

Hier ist meine Arraylist die Dateien erhalten

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

Hier wird verwendet, um die Filter

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 
    } 

}; 

In meinem Listview OnClickListener es geben mir immer die falsche Position und habe den falschen Dateipfad gefunden.

Bitte helfen. Vielen Dank. Ersetzen

+0

vielen Dank @MikeM. ! –

+0

Kein Problem. Wenn dieser Beitrag Ihre Frage beantwortet, sollten Sie ihn als hilfreich markieren können, um Ihre Frage abzuschließen. Prost! –

Antwort

1

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

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

von https://stackoverflow.com/a/19926676/3977935 Genommen

+0

Ich kann 'getName()' in getItem() nicht verwenden. –

+0

@KairiSan aktualisiert meine Antwort. Jetzt prüfen –

+0

Meine Anwendung stürzt ab, wenn ich auf ein Objekt klicke. :( –

0

Dies beruht auf Mikes Kommentar auf meine Frage.

geändert

fileList.get(position).getName()

zu

parent.getAdapter().getItem(position);

Ich habe es von here

Verwandte Themen