简体   繁体   English

android在ListView项目中实现多次单击事件

[英]android implement multiple click event in ListView item

I wanna to implement multiple button in my ListView items. 我想在ListView项目中实现多个按钮。 But the problem is that i couldn't handle click event when button is clicked, i mean they are Play button and Image button like this 但是问题是当单击按钮时,我无法处理单击事件,我的意思是它们是“播放”按钮和“图像”按钮,就像这样

在此处输入图片说明

Here is my Adapter: 这是我的适配器:

public class ArtistsAdapter extends BaseAdapter implements SectionIndexer {

private HashMap<String, Integer> alphaIndexer;
private String[] sections;
private LayoutInflater inflater;
private int resId;
private Context context;
private ArrayList<Artist> artistList;

public ArtistsAdapter(Context context, int resId, ArrayList<Artist> artistList) {
    this.resId = resId;
    this.context = context;
    this.artistList = artistList;
    this.inflater = LayoutInflater.from(context);
}

@Override
public Object[] getSections() {
    return sections;
}

@Override
public int getPositionForSection(int section) {
    return alphaIndexer.get(sections[section]);
}

@Override
public int getSectionForPosition(int position) {
    return 1;
}

private static class ViewHolder {
    ImageView artistImgItem;
    ImageButton artistPlayItem;
    TextView artistNameItem;
    TextView artistAgeItem;
    LinearLayout artistItem;
}

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

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

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

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    Artist artist = (Artist) getItem(position);
    ViewHolder viewHolder;
    if (convertView == null) {
        convertView = this.inflater.inflate(resId, parent, false);
        viewHolder = new ViewHolder();
        viewHolder.artistImgItem = (ImageView) convertView.findViewById(R.id.artistImg);
        viewHolder.artistPlayItem = (ImageButton) convertView.findViewById(R.id.artistPlay);
        viewHolder.artistNameItem = (TextView) convertView.findViewById(R.id.artistName);
        viewHolder.artistAgeItem = (TextView) convertView.findViewById(R.id.artistAge);
        viewHolder.artistItem = (LinearLayout) convertView.findViewById(R.id.artistItem);
        convertView.setTag(viewHolder);
    } else viewHolder = (ViewHolder) convertView.getTag();
    viewHolder.artistNameItem.setText(artist.getName());

    viewHolder.artistPlayItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.i("aaaaa", position+"ssss");
            Toast.makeText(context, "Music playin " + position+1 +"", Toast.LENGTH_SHORT).show();
        }
    });
    viewHolder.artistItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ((ArtistsActivity) context).showArtistView();
        }
    });
    viewHolder.artistImgItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ((ArtistsActivity) context).showArtistView();
        }
    });
    return convertView;
}

} }

And my activity looks like that 我的活动看起来像这样

public class ArtistsActivity extends Activity {

private IndexableListView artistListUI;
private ImageView maleArtist, femaleArtist, groupArtist, artistImg;
private ArtistsAdapter artistsAdapter;
private ArrayList<Artist> maleArtistList, femaleArtistList, groupArtistList;


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

    artistListUI = (IndexableListView) findViewById(R.id.artistListView);
    maleArtist = (ImageView) findViewById(R.id.maleArtist);
    femaleArtist = (ImageView) findViewById(R.id.femaleArtist);
    groupArtist = (ImageView) findViewById(R.id.groupArtist);
    artistImg = (ImageView) findViewById(R.id.artistImg);

    artistListUI.setFastScrollEnabled(true);     

    artistsAdapter = new ArtistsAdapter(ArtistsActivity.this, R.layout.artist_item, artistList);
    artistListUI.setAdapter(artistsAdapter);



public void showArtistView() {
    startActivity(new Intent(ArtistsActivity.this, AlbumsActivity.class));
}

} }

 you have to set clickable property of listview to false
 because of entire listview click is fire

This is resolved in the adapter. 这在适配器中解决。 Look at this example: 看这个例子:

https://github.com/m-alcu/SkoltiAlert/blob/master/src/com/alcubier/skoltialert/tracks/TrackAdapter.java https://github.com/m-alcu/SkoltiAlert/blob/master/src/com/alcubier/skoltialert/tracks/TrackAdapter.java

In the bindView or getView method you have to define your clickhandler linked to your view: 在bindView或getView方法中,您必须定义链接到视图的clickhandler:

holder.hLayout.setOnClickListener(new MentionClickhandler());

And do sour stuff in this function: 并在此功能中添加一些酸味的东西:

public class MentionClickhandler implements View.OnClickListener 
{
public void onClick( View view ){

    Track trackTag = new Track();
    trackTag = (Track) view.getTag();
    Log.i(TAG, "item: "+trackTag.getSearchTrack());

    Bundle bundle = new Bundle();
    bundle.putInt("idTrack", trackTag.getIdTrack());
    bundle.putString("searchTrack", trackTag.getSearchTrack());
    bundle.putInt("topTrack", trackTag.getTopTrack());
    bundle.putLong("lastId", trackTag.getLastId());
    bundle.putInt("count", trackTag.getCount());
    bundle.putString("type", "LastMentions");

    Intent i = new Intent(context, GDMentionsList.class);
    i.putExtras(bundle);
    context.startActivity(i);

}
}

Hope it helps... 希望能帮助到你...

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

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