[I created a project that uses an ArrayList to store data and when I click on each item on the list view it starts a new activity, after that I added image button to the ListView now the app is lunching correctly but when I click on items nothing happens.][1]
Main java code:
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create an ArrayList of MusicApp objects
ArrayList<Music> music = new ArrayList<Music>();
music.add(new Music(R.drawable.cover1, "Title1", R.drawable.cover1));
music.add(new Music(R.drawable.cover2, "Title2", R.drawable.cover1));
music.add(new Music(R.drawable.cover3, "Title3", R.drawable.cover1));
music.add(new Music(R.drawable.cover4, "Title4", R.drawable.cover1));
music.add(new Music(R.drawable.cover5, "Title5", R.drawable.cover1));
music.add(new Music(R.drawable.cover6, "Title6", R.drawable.cover1));
AndroidMusicAdapter musicAdapter = new AndroidMusicAdapter(this, music);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(musicAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
startActivity(position);
}
});
}
public void startActivity(int position) {
if (position == 0) {
startActivity(new Intent(MainActivity.this, Song1Activity.class));
}
if (position == 1) {
startActivity(new Intent(MainActivity.this, Song2Activity.class));
}
if (position == 2) {
startActivity(new Intent(MainActivity.this, Song3Activity.class));
}
if (position == 3) {
startActivity(new Intent(MainActivity.this, Song4Activity.class));
}
if (position == 4) {
startActivity(new Intent(MainActivity.this, Song5Activity.class));
}
if (position == 5) {
startActivity(new Intent(MainActivity.this, Song6Activity.class));
}
}
}
Adapter code
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class AndroidMusicAdapter extends ArrayAdapter<Music> {
public AndroidMusicAdapter(Activity context, ArrayList<Music> music) {
super(context, 0, music);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Check if the existing view is being reused, otherwise inflate the view
View listItemView = convertView;
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
}
// Get the {@link Music} object located at this position in the list
Music currentMusic = getItem(position);
// Find the ImageView in the list_item.xml layout with the ID list_item_icon
ImageView iconView = (ImageView) listItemView.findViewById(R.id.list_item_icon);
// set the image to iconView
iconView.setImageResource(currentMusic.getImageResourceId());
// Find the TextView in the list_item.xml layout with the ID song_name
TextView nameTextView = (TextView) listItemView.findViewById(R.id.song_name);// Get the version name from the current AndroidFlavor object and
// set this text on the name TextView
nameTextView.setText(currentMusic.getSongName());
ImageButton playButton = (ImageButton) listItemView.findViewById(R.id.playButton);
playButton.setImageResource(currentMusic.getPlay());
//Return the whole list item layout (containing 1 textView &nd 1 imageView)
return listItemView;
}
}
methods code
public class Music {
// Drawable resource ID
private int mImageResourceId;
// Name of the song
private String mSongName;
// play button
private int mPlay;
public Music(int imageResourceId, String songName, int play) {
mImageResourceId = imageResourceId;
mSongName = songName;
mPlay = play;
}
public int getImageResourceId() {
return mImageResourceId;
}
public String getSongName() {
return mSongName;
}
public int getPlay() {
return mPlay;
}
}
layout code
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:padding="16dp">
<ImageButton
android:id="@+id/playButton"
android:layout_width="50dp"
android:layout_height="50dp"
android:contentDescription="TODO" />
<ImageView
android:id="@+id/list_item_icon"
android:layout_width="50dp"
android:layout_height="50dp" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:paddingLeft="16dp">
<TextView
android:id="@+id/song_name"
style="@style/titleStyle"/>
</LinearLayout>
listView code
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingTop="16dp"
android:paddingRight="16dp"
android:paddingBottom="16dp"
tools:context=".MainActivity">
</ListView>
Your Code need improvements but to solve your problem you can add to your Adapter code listItemView.setOnClickListner(and implement method click listener)
and move your function startActivity to Adapter code and finally put startActivity inside listItemView.setOnClickListner and remove listView.setOnItemClickListener
from your Main java code
Note : edit startActivity new Intent(MainActivity.this, Song1Activity.class)
with new Intent(getcontext(), Song1Activity.class)
After move to your adapter
public void startActivity(int position) { if (position == 0) { startActivity(new Intent(getcontext(), Song1Activity.class)); } if (position == 1) { startActivity(new Intent(getcontext(), Song2Activity.class)); } if (position == 2) { startActivity(new Intent(getcontext(), Song3Activity.class)); } if (position == 3) { startActivity(new Intent(getcontext(), Song4Activity.class)); } if (position == 4) { startActivity(new Intent(getcontext(), Song5Activity.class)); } if (position == 5) { startActivity(new Intent(getcontext(), Song6Activity.class)); } } }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.