2013-08-06 2 views
2

Вот как работает мое приложение. Пользователь записывает звук, а затем дает ему определенное имя. В этом примере я буду записывать два звуковых файла. Test1.mp3 и Test2.mp3. После того, как я закончил запись в первый раз, появится диалоговое окно, и я набираю «Test1», то же самое касается второй записи. В список были добавлены Test1.mp3 и Test2.mp3. Это код:Установить onClickListener для каждого элемента списка

//filename is a variable for the name of the file, these lines execute everytime I record a new file 
ArrayList<String> fileNames = new ArrayList<String>(); 
fileNames.add(filename.toString()); 
listView = (ListView) findViewById (R.id.mainListView); 
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, fileNames); 
listView.setAdapter(listAdapter); 

Итак, после того, как я записал оба файла, и они будут добавлены в ListView, я хочу, чтобы установить onClickListeners в обоих ListView элементов. Но как мне это сделать? Как сделать так, чтобы каждый раз, когда новый файл был добавлен в список, он также автоматически генерирует метод onclick. Это было бы не так сложно, но каждый записанный файл, конечно, имеет другой путь.

Теперь код:

//LISTVIEW 
    fileNames.add(filename.toString()); //adding each filename to ArrayList<String> 
    listView = (ListView) findViewById (R.id.mainListView); 
    listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, fileNames); 
    listView.setAdapter(listAdapter); 

    listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      Toast toast = Toast.makeText(getApplicationContext(), filename, Toast.LENGTH_SHORT); 
      toast.show(); 
     } 

    }); 

Это код, который выполняется каждый раз, когда новый файл записывается

+1

Вы имеете в виду ['onItemClickListener'] (http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html)? – Geobits

ответ

4

Вам не нужно, чтобы добавить новый слушатель каждый раз, когда вы добавляете элемент к списку. Вы можете использовать OnItemClickListener набор один раз и навсегда, и вы сможете найти пункт, который был щелкнул по индексу в функции обратного вызова

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) 

, который, параметр int position.

реализация

Внутри onItemClick, вы можете получить элемент, который был щелкнул по

arg0.getItemAtPosition(position) 

Кроме того, вам не придется добавлять onItemClickListener каждый раз, вы можете просто подготовить его один раз в методе OnCreate вашей деятельности и никогда не меняйте ее.

Что вам нужно будет сделать, это сделать новый адаптер (или добавить новый элемент к адаптеру), когда ваша новая запись файла прекращена.

я подготовил почти полный образец, чтобы показать, как использовать ListView:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final ArrayList<String> fileNames = new ArrayList<String>(); 
    fileNames.add("Test1.mp3"); 
    fileNames.add("Test2.mp3"); 

    final ListView listView = (ListView) findViewById (R.id.mainListView); 
    ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, fileNames); 
    listView.setAdapter(listAdapter); 

    listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
      Toast toast = Toast.makeText(getApplicationContext(), 
        (String)arg0.getItemAtPosition(position), Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
    }); 
} 

Этого достаточно, если элементы в списке не изменяются.

Когда запись следующего файла mp3 прекращается, и вы хотите, чтобы добавить элемент в список, вы можете просто сделать:

ListView listView = (ListView) findViewById (R.id.mainListView); 
fileNames.add("Test3.mp3"); 
((ArrayAdapter<String>)listView.getAdapter()).notifyDataSetChanged(); 

Заменить «TEST3» с названием файла нового формата MP3, и это будет отображаться в списке.

+0

Спасибо за ваш ответ! Я пытался это сделать, но что-то не работает. Я добавил тост, чтобы посмотреть, работает ли он, но это не так. Когда я записываю Test1.mp3, он показывает Test1, когда я нажимаю на элемент, но затем, когда я записываю Test2, оба элемента показывают Test2, если вы знаете, что я имею в виду. Любая идея, что можно сделать неправильно? Я не совсем получаю часть arg0.getItemAtPosition – Pizzret

+0

Странно, что когда вы добавляете второй элемент в список, первый элемент изменяется.Можете ли вы опубликовать код, в который вы добавляете новые элементы в список? Я предполагаю, что есть некоторые проблемы в том, как эта часть реализована. – Lake

+0

Я отредактировал свое оригинальное сообщение, пожалуйста, зарегистрируйтесь – Pizzret

0
listview.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 

    switch(position){ 
    case 0: 
    blablbla 
    break; 
    case1 1: 
    blabla 
    break; 
    /.... 
    } 
    }): 
0

Необходимо указать для каждого элемента функцию onClick. Как и в Android Arabia.

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