2013-08-06 3 views
2

다음은 내 앱의 작동 방식입니다. 사용자가 소리를 녹음 한 다음 특정 이름을 지정합니다. 이 예에서는 두 개의 사운드 파일을 녹음합니다. Test1.mp3 및 Test2.mp3. 처음으로 녹음을 마친 후에 대화 상자가 나타나고 'Test1'을 입력하면 두 번째 녹음도 동일하게 진행됩니다. 이제 Test1.mp3 및 Test2.mp3이 목록보기에 추가되었습니다. 나는이 두 파일을 녹음 한 그들이 목록보기에 추가하고 이후모든 단일 listview 요소에 대해 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); 

그래서, 나는 두리스트 뷰 요소 onClickListeners을 설정하려면 :이 코드입니다. 하지만 어떻게해야합니까? 새로운 기록 파일이리스트 뷰에 추가 될 때마다 자동으로 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 메서드에서 한 번 준비 할 수 있습니다 귀하의 활동을 변경하지 마십시오.

대신 새 파일 기록이 종료되면 새 어댑터를 만들거나 어댑터에 새 항목을 추가해야합니다. 이 목록의 항목이 변경되지 않는 경우에 충분하다

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

"테스트 3"를 장착하고 :

당신의 다음 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 기능을 지정해야합니다. 안드로이드 아라비아처럼 말했다.

관련 문제