2014-08-27 5 views
0

Почему я получаю исключение NullPointerException в fn = list.getSelectedItem().toString();.NPE при сохранении выбранного элемента ListView

public class FileList extends Activity{ 

ListView list; 
String fn; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.filelist); 


    list = (ListView) findViewById(R.id.lv1); 

    String pth = Environment.getExternalStorageDirectory().getPath(); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getListOfFiles(pth)); 
    list.setAdapter(adapter); 

    list.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> arg0, 
        View arg1, int position, long arg3) 
     { 
      System.out.println(list.getSelectedItem().toString()); 
      fn = list.getSelectedItem().toString(); //NPE Here 
     } 
     }); 

} 
+0

theres опечатка в строке 5 'getSelectedItem()'. – r2DoesInc

+0

@ r2DoesInc что? Похоже, я ослеплен: D вы можете найти его для меня: P –

+0

Где объявлено fn? Обратите внимание, что вы не можете изменять значение переменных, объявленных вне области действия OnItemClickListener, и вы можете читать их значения только в том случае, если они объявлены 'final' – mittelmania

ответ

2

Вы должны использовать getItemAtPosition вместо

String path = (String) arg0.getItemAtPosition(position); 

http://developer.android.com/reference/android/widget/AdapterView.html#getItemAtPosition%28int%29

Docs:

getItemAtPosition общественного объекта (целое положение) Добавлено в уровне API 1

Gets the data associated with the specified position in the list. 
Parameters 
position Which data to get 
Returns The data associated with the specified position in the list 

Также читайте

общественный объект getSelectedItem() Добавлено в уровне API 1

возвращает данные, соответствующие к выбранному в данный момент элементу или null , если ничего не выбрано.

+0

Да, спасибо за подробный обзор :) –

1

Попробуйте использовать другой подход:

protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    Object selectedValue = this.getListAdapter().getItem(position); 
    String value = selectedValue.toString(); 
    Toast.makeText(this, "You have chosen " + value , Toast.LENGTH_LONG).show(); 

} 
+1

Просто поясните, что этот способ следует использовать с ListActivity. –

+0

Араш, это ты! –

Смежные вопросы