2014-05-01 2 views
0

각 목록 항목에는 목록 버튼의 가시성이 목록 항목의 XML에서 사라지도록 설정된 두 개의 버튼, 한 개의 텍스트보기 및 한 개의 탐색 막대가있는 사용자 정의 목록보기가 있습니다.목록보기 항목의 버튼 클릭 처리 android

이제 목록 항목에서 버튼 하나를 클릭하면됩니다. 텍스트보기를 숨기고 버튼이 클릭 된 목록 항목의 탐색 막대를 표시하고 검색 막대를 숨기고 텍스트를 표시하려고합니다. 다른 모든 목록 항목보기

전체 항목이 목록보기에서 한 번에 표시 될 수 있지만 많은보기의 경우이보기가 작동하지 않는보기보다 작 으면 잘 작성된 코드가 제대로 작동합니다. 내가 뭐하는 거지

내가 잘못 하겠어 경우에만

알려주세요 목록보기로 폴더에서 파일 목록을로드하고 목록보기에서 재생할 수 있습니다. 도움이 될 것입니다.

내 어댑터 코드 :

public class AudioFileListAdapter extends BaseAdapter { 
Context context; 
ArrayList<String> fileList; 
LayoutInflater inflater; 
String folder; 
ListView mListView; 
public MediaPlayer mPlayer; 
public Handler seekHandler; 
SeekBar mSeekBar; 
int clickedPos = -1; 

protected static class RowViewHolder { 
    public TextView fileName; 
    public Button filePlay; 
    public Button rate; 
    public SeekBar fileSeek; 
} 

public AudioFileListAdapter(Context context, ArrayList<String> fileList, 
     String folder) { 
    this.fileList = fileList; 
    this.context = context; 
    this.folder = folder; 
    mListView = (ListView) ((Activity) context) 
      .findViewById(R.id.Filelistview); 

    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    seekHandler = new Handler(); 
} 

@Override 
public int getCount() { 
    return fileList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return fileList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    RowViewHolder viewHolder; 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.audio_file_list_item, null); 
     viewHolder = new RowViewHolder(); 
     viewHolder.fileName = (TextView) convertView 
       .findViewById(R.id.file_name); 
     viewHolder.filePlay = (Button) convertView 
       .findViewById(R.id.file_play); 
     viewHolder.filePlay.setTag(position); 
     viewHolder.rate = (Button) convertView.findViewById(R.id.rate); 
     viewHolder.fileSeek = (SeekBar) convertView 
       .findViewById(R.id.file_seek); 
     viewHolder.filePlay.setOnClickListener(mListener); 
     viewHolder.rate.setOnClickListener(mListener); 
     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (RowViewHolder) convertView.getTag(); 
    } 

    viewHolder.fileName.setText(fileList.get(position)); 
    return convertView; 
} 

OnClickListener mListener = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     if (v.getId() == R.id.file_play) 
     { 

      final int position = mListView.getPositionForView((View) v 
        .getParent()); 
      Log.d("position"+position, "count"+mListView.getCount()); 
      for (int i = 0 ; i < mListView.getChildCount(); i++) { 
       RowViewHolder viewholder = (RowViewHolder) ((View) mListView 
         .getChildAt(i)).getTag(); 
       if (i == position) { 
        String path = Environment.getExternalStorageDirectory() 
          .toString() 
          + "/analyser/" 
          + folder 
          + "/" 
          + fileList.get(i); 
        mSeekBar = viewholder.fileSeek; 

        Log.d("IN the click "+i,path); 
        // mSeekBar.setEnabled(false); 
        mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

         @Override 
         public void onStopTrackingTouch(SeekBar seekBar) { 
          // TODO Auto-generated method stub 

         } 

         @Override 
         public void onStartTrackingTouch(SeekBar seekBar) { 
          // TODO Auto-generated method stub 

         } 

         @Override 
         public void onProgressChanged(SeekBar seekBar, int progress, 
           boolean fromUser) { 
          if(mPlayer != null && fromUser){ 
           mPlayer.seekTo(progress); 
          } 

         } 
        }); 
        viewholder.fileSeek.setVisibility(View.VISIBLE); 
        viewholder.fileName.setVisibility(View.GONE); 
        play(path); 
       } else { 
        viewholder.fileSeek.setVisibility(View.GONE); 
        viewholder.fileName.setVisibility(View.VISIBLE); 
       } 
      } 

     } 
     if (v.getId() == R.id.rate) { 

     } 
    } 
}; 

public void play(String path) { 
    if (mPlayer == null) { 
     mPlayer = new MediaPlayer(); 
     mPlayer.setOnPreparedListener(new OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer mp) { 
       mSeekBar.setMax(mPlayer.getDuration()); 
       mp.start(); 
       seekUpdation(); 
      } 
     }); 
     mPlayer.setOnCompletionListener(new OnCompletionListener() { 

      @Override 
      public void onCompletion(MediaPlayer mp) { 
       mPlayer.release(); 
       mPlayer = null; 
       seekHandler.removeCallbacks(run); 

      } 
     }); 

    } 

    if (mPlayer.isPlaying()) { 
     mPlayer.stop(); 
     mPlayer.reset(); 
     seekHandler.removeCallbacks(run); 
    } 
    try { 
     mPlayer.setDataSource(path); 
     mPlayer.prepare(); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public Runnable run = new Runnable() { 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     if (mPlayer != null) { 
      seekUpdation(); 
     } 

    } 
}; 

public void seekUpdation() { 
    if (mPlayer != null) { 
     mSeekBar.setProgress(mPlayer.getCurrentPosition()); 
     seekHandler.postDelayed(run, 1000); 
    } 
} 

}

답변

0

당신은 어댑터 클래스의 getView 방법에있는 버튼에 대한 리스너를 설정해야합니다.

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     RowViewHolder viewHolder; 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.audio_file_list_item, null); 
      viewHolder = new RowViewHolder(); 
      viewHolder.fileName = (TextView) convertView.findViewById(R.id.file_name); 
      viewHolder.filePlay = (Button) convertView.findViewById(R.id.file_play); 
      viewHolder.filePlay.setOnClickListener(new OnClickListener(){ 

        @Override 
        public void onClick(View view){ 

        // Do Your Work Here 
        } 

      }); 
      viewHolder.filePlay.setTag(position); 
      viewHolder.rate = (Button) convertView.findViewById(R.id.rate); 
      viewHolder.fileSeek = (SeekBar) convertView.findViewById(R.id.file_seek); 
      viewHolder.filePlay.setOnClickListener(mListener); 
      viewHolder.rate.setOnClickListener(mListener); 
      convertView.setTag(viewHolder); 
    } else { 
      viewHolder = (RowViewHolder) convertView.getTag(); 
} 

viewHolder.fileName.setText(fileList.get(position)); 
return convertView; 

}

+0

는 이미의 getView에서 리스너를 추가했습니다. onClick에서 무엇을하는지는 텍스트보기를 숨기고 버튼이 눌려진 목록보기 항목에 탐색 모음을 표시하는 것입니다. seekbar가 표시되는 목록보기의 첫 번째 단추를 클릭했지만 다른 일부 항목에 대한 seekbar를 스크롤하면 표시 될 수도 있습니다. 이 문제를 어떻게 해결할 수 있을까요? – Dpk

+0

다른보기의 가시성을 VISIBLE로 설정할 수 있습니다. 단추의 OnClick에서 : 'viewholder.fileseek.setVisibility (View.VISIBLE);' –

+0

이미 내 onClick을 확인했습니다. 다른 항목을 스크롤하는 중에도 탐색 표시가 나타나기 시작합니다. – Dpk