2014-10-21 4 views
1

버튼이있는 시트가 있습니다. 시트의 요소에 이벤트 핸들러를 지정합니다. 당신이 그에게 입장을 줄 때. 하지만 시트의이 요소에있는 버튼에 이벤트를 할당해야합니다. 나는 어댑터에서 그것을하고 그것을 누르면됩니다. 그러나 시트의 어떤 요소가 눌려 졌는지 어떻게 결정합니까?버튼 요소 목록보기 누르기

class RecordAdapter extends BaseAdapter implements View.OnClickListener { 
    MediaPlayer mediaPlayer; 
    private LayoutInflater inflater; 
    ArrayList<RecordBean> recordBeans; 
    Context ctx; 

    public RecordAdapter(final Context ctx, ArrayList<RecordBean> recordBeans) { 
     this.recordBeans =recordBeans; 
     this.ctx=ctx; 
     inflater = LayoutInflater.from(ctx); 
    } 

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

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

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     final ViewHolder holder; 
     if (convertView == null) { 
      view = inflater.inflate(R.layout.recorditem, parent, false); 
      holder = new ViewHolder(); 
      holder.date = (TextView) view.findViewById(R.id.recordate); 
      holder.from = (TextView) view.findViewById(R.id.recordFrom); 
      holder.to = (TextView) view.findViewById(R.id.recordTo); 
      holder.seekBar = (SeekBar) view.findViewById(R.id.seekBar); 
      holder.start = (Button) view.findViewById(R.id.btnStart); 
      holder.stop = (Button) view.findViewById(R.id.btnStop); 

      view.setTag(holder); 
     } else { 
      holder = (ViewHolder) view.getTag(); 
     } 
     holder.date.setText(" " + recordBeans.get(position).getDate()); 
     holder.from.setText(" " + recordBeans.get(position).getFrom()); 
     holder.to.setText(" " + recordBeans.get(position).getTo()); 
     holder.start.setOnClickListener(this); 
     holder.stop.setOnClickListener(this); 
     return view; 
    } 

    @Override 
    public void onClick(View view) { 
     switch (view.getId()){ 
      case R.id.btnStart: 
       mediaPlayer = MediaPlayer.create(ctx,Uri.parse(recordBeans.get(3).getFile())); 
       mediaPlayer.start(); 
       break; 
     } 
    } 

    private static class ViewHolder { 
     TextView date; 
     TextView from; 
     TextView to; 
     SeekBar seekBar; 
     Button start; 
     Button stop; 
    } 
    } 
} 

대신 recordBeans.get(3).getFile() 나는 stop에 대한

+1

설정하여 버튼'onClickListner' 내부 클래스로와의 getView'에'의 getView (.....)'당신이 –

+0

'position' 변수에 위치를 전달 (...)'메소드가 그것을 사용합니다. 더 익명의 내부 클래스를 사용하십시오. – Rustam

답변

3
당신이 당신의 getView(...) 방법 안에이 작업을 수행 할 수 있습니다

자체

 holder.start.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

        mediaPlayer = MediaPlayer.create(ctx,Uri.parse(recordBeans.get(position).getFile())); 
        mediaPlayer.start(); 

      } 
     }); 

같은 모든 버튼에 동일한 설정이 이제 recordBeans.get(itemPosition).getFile()

을 쓰고 싶어 .

 holder.stop.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

        mediaPlayer.stop(); 

      } 
     }); 
+0

세련된! 나는 생각하지 않았다. (((감사합니다!))) – IP696

2

이 방법을 시도해보고 문제를 해결하는 데 도움이되기를 바랍니다. 당신이 태그에서 적절한 시작을 버튼 GET 값을 클릭하고 요구 사항에 따라 사용할 때

설정하면 RecordBean 데이터 버튼태그를 시작합니다.

class RecordAdapter extends BaseAdapter implements View.OnClickListener { 
    MediaPlayer mediaPlayer; 
    ArrayList<RecordBean> recordBeans; 
    Context ctx; 

    public RecordAdapter(final Context ctx, ArrayList<RecordBean> recordBeans) { 
     this.recordBeans =recordBeans; 
     this.ctx=ctx; 
    } 

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

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

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     final ViewHolder holder; 
     if (convertView == null) { 
      view = LayoutInflater.from(ctx).inflate(R.layout.recorditem, parent, false); 
      holder = new ViewHolder(); 
      holder.date = (TextView) view.findViewById(R.id.recordate); 
      holder.from = (TextView) view.findViewById(R.id.recordFrom); 
      holder.to = (TextView) view.findViewById(R.id.recordTo); 
      holder.seekBar = (SeekBar) view.findViewById(R.id.seekBar); 
      holder.start = (Button) view.findViewById(R.id.btnStart); 
      holder.stop = (Button) view.findViewById(R.id.btnStop); 

      view.setTag(holder); 
     } else { 
      holder = (ViewHolder) view.getTag(); 
     } 
     holder.date.setText(" " + recordBeans.get(position).getDate()); 
     holder.from.setText(" " + recordBeans.get(position).getFrom()); 
     holder.to.setText(" " + recordBeans.get(position).getTo()); 
     holder.start.setTag(recordBeans.get(position)); 
     holder.start.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mediaPlayer = MediaPlayer.create(ctx,Uri.parse(((RecordBean) v.getTag()).getFile())); 
       mediaPlayer.start(); 
      } 
     }); 
     holder.stop.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mediaPlayer.stop(); 
      } 
     }); 
     return view; 
    } 

    private static class ViewHolder { 
     TextView date; 
     TextView from; 
     TextView to; 
     SeekBar seekBar; 
     Button start; 
     Button stop; 
    } 
} 
+0

고마워요! 정확히 같은 대답이지만 작동하고 있습니다! – IP696

+0

@ IP696, 당신이 승인하고 upvote ans는 당신에게 유용 할 수 있습니까? –

0

확인이 :

final int itemPosition = position; 

    holder.start.setOnClickListenerOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        mediaPlayer = MediaPlayer.create(ctx,Uri.parse(recordBeans.get(itemPosition).getFile())); 
        mediaPlayer.start(); 
    } 
    }); 
      holder.stop.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        mediaPlayer.stop()); 
    } 
    });