2016-09-01 3 views
0

Я пытаюсь переместить позицию позиции на ListView, нажав кнопку, которая будет перемещаться вверх по одной строке списка. Я пробовал искать другие ответы на SO, но их ListView был заселен из ArrayList в то время как мин от fileList()listview move up позиция позиции

Нужно ли каким-либо образом сортировать файлы в fileList()? или использует ArrayList достаточно для меня, чтобы изменить свои позиции?

Я использовал ArrayList, чтобы получить позицию элемента

Как заполнить мой ListView

String[] SavedFiles; 
String dataDr; 

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

    dataDr = getApplicationInfo().dataDir; 
    showDirFile(dataDr); 
} 

void showDirFile(String dirpth) 
{ 
    String path = dirpth+"/files"; 
    Log.d("Files", "Path: " + path); 
    File f = new File(path); 
    File file[] = f.listFiles(); 
    Log.d("Files", "Size: "+ file.length); 

    SavedFiles = new String[file.length]; 
    for (int i=0; i < file.length; i++) 
    { 
     Log.d("Files", "FileName:" + file[i].getName()); 

     SavedFiles[i] = file[i].getName(); 
    } 

    ArrayAdapter<String> adapter 
      = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, 
      SavedFiles); 
    listView.setAdapter(adapter); 
} 

Как получить позицию элемента

OnItemClickListener getFileEditContent = new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // Get item's file name according to position 
     String clickedFile = (String)parent.getItemAtPosition(position); 
     stringArrayList.add(clickedFile) 

     // Get item position 
     intArrayList.add(position); 

    } 
}; 

ответ

0

вы использовали String[] SavedFiles; для отображения списка с помощью адаптера ,

По щелчку элемента, который вы хотите переместить для этой логики записи для замены элементов массива и уведомления об адаптере.

Ваша логика сделает верхний элемент текущей и текущей от первой до верхней.

Надеюсь, это вам поможет.

0

мне удалось решить это сам при помощи функции Collections.swap методы

Примера

Collections collections; 

void positionChange(){ 

    //to store arrays into ArrayList 
    List<String> newList = new ArrayList<String>(Arrays.asList(myDataFiles)); 

    //to get the item's position @ get the first item in array if multiple arrays exist 
    String currentPos = String.valueOf(intArrayList.get(0)); 
    int oldPos = Integer.valueOf(currentPos); 
    int newPos = oldPos-1; 

    //Swap position @ move up list 
    collections.swap(newList, oldPos, newPos); 

    //store ArrayList data into arrays 
    myDataFiles = newList.toArray(myDataFiles); 

    intArrayList.clear(); 

    adapter.notifyDataSetChanged(); 
} 

Это сделает наш выбранный элемент двигаться вверх, но не сохранит состояние. Значение позиции позиции, отображаемой на ListView, вернется к тому, как оно было при закрытии приложения.

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