简体   繁体   中英

Could not click on ArrayList Items

[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.

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