2014-09-13 100 views
1

我想在我的ListView項目中實現多個按鈕。但問題是,我無法處理單擊事件按鈕被點擊的時候,我的意思是他們是播放按鈕,圖像按鈕,這樣android在ListView項目中實現多個點擊事件

enter image description here

這裏是我的適配器:

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

}

而且我的行爲看起來像

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

}

+0

請發佈您的代碼,爲您打電話的地方listview適配器(藝術家適配器)。那就是你需要處理按鈕點擊的地方。 – erad 2014-09-13 13:44:37

+1

此問題實際上關注於IndexableListView.Here此問題已解決。 https://github.com/gabrielemariotti/cardslib/issues/70 – nAkhmedov 2014-09-15 05:34:54

回答

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

這不是必需的。你可以有按鈕,並有'listview'可點擊。 – erad 2014-09-13 14:14:07

0

這是在適配器中解決的。請看下面的例子:

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

在你要定義你的函數clickhandler鏈接到您的視圖中的bindView或getView方法:

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

在此函數中做酸味的東西:

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

} 
} 

希望它有幫助...