Приветствую. Проблема: на эмуляторе дройда этот кода работает некорректно, а на реальном девайсе отрабатывает без проблем. Если запускать в эмуляторе до строчек после
m_adapter.clear();
listFiles
public class FileTree extends ListActivity
{
private File m_lst[] = null;
private String m_path = "/";
private ArrayAdapter<String> m_adapter = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_tree);
m_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
setListAdapter(m_adapter);
listFiles("/");
}
protected void onListItemClick (ListView l, View v, int position, long id)
{
Log.v("click", String.valueOf(position));
position--;
if ((position > -1) && (m_lst != null) && (position < m_lst.length))
{
if (m_lst[position].isDirectory())
{
listFiles(m_lst[position].getAbsolutePath());
}
} else if (position == -1)
{
int a = m_path.lastIndexOf('/');
if (a > 0)
listFiles(m_path.substring(0, a));
}
else
{
Log.v("click", "else");
}
}
protected void listFiles(String path)
{
if (m_adapter == null)
return;
Log.v("list", path);
m_path = path;
File f = new File(path);
m_lst = f.listFiles();
if (m_lst != null)
{
String toAdapter[] = new String[m_lst.length + 1];
toAdapter[0] = "..";
for (int i = 0; i < m_lst.length; i++)
{
if (m_lst[i].isDirectory())
{
toAdapter[i + 1] = "+ " + m_lst[i].getName();
}
else
{
toAdapter[i + 1] = m_lst[i].getName();
}
}
m_adapter.clear();
Log.v("list", "cleared");
m_adapter.addAll(toAdapter);
Log.v("list", "updated");
m_adapter.notifyDataSetChanged();
Log.v("list", "notified");
}
}
}
Как одно из предположений он тупо висит в методе
ArrayAdapter.clear()
synchronized (mLock) {
/**
* Remove all elements from the list.
*/
public void clear() {
synchronized (mLock) {
if (mOriginalValues != null) {
mOriginalValues.clear();
} else {
mObjects.clear();
}
}
if (mNotifyOnChange) notifyDataSetChanged();
}
Что я делаю не так?
Я бы забил, но есть вероятность что этот баг даст о себе знать на реальном устройстве.