简体   繁体   English

处理列表视图项目android中的按钮单击

[英]handling click of buttons in list view item android

I have a custom list view where each list item has two buttons, one text view and one seek bar where the seek bar visibility is set to gone in list item's XML. 我有一个自定义列表视图,其中每个列表项都有两个按钮,一个文本视图和一个搜索栏,其中搜索栏可见性设置为列表项的XML。

Now what I want to do is on click of button one in the list item I want to hide the text view and display the seek bar of that list item whose button is clicked and show hide the seek bar and display the text view of all other list items. 现在,我想做的是单击列表项中的一个按钮,我想隐藏文本视图并显示该列表项的搜索条,单击该按钮,然后显示隐藏搜索条并显示所有其他文本视图列出项目。

The code that I have written works well if the total items are less than the views that can be displayed at once in a list view but for a lot of views this does not works. 如果总项目数少于列表视图中可以一次显示的视图,则我编写的代码效果很好,但是对于很多视图来说,这是行不通的。

What I am doing is load a list of files from aa folder into the list view and play the in the list view only 我正在做的是将一个文件夹中的文件列表加载到列表视图中,然后仅在列表视图中播放

Please tell me where I am going wrong. 请告诉我我要去哪里了。 Any help would be appreciated. 任何帮助,将不胜感激。

My Adapter Code: 我的适配器代码:

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);
    }
}

} }

You have to set the listeners for the button in the Adapter class getView method. 您必须在Adapter类的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;

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM