简体   繁体   English

无法点击 ArrayList 项目

[英]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] [我创建了一个使用 ArrayList 存储数据的项目,当我单击列表视图上的每个项目时,它会启动一个新活动,之后我将图像按钮添加到 ListView 现在该应用程序正在正确午餐,但是当我单击项目时没有任何反应。][1]

Main java code:主要Java代码:

    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您的代码需要改进,但要解决您的问题,您可以添加到您的适配器代码listItemView.setOnClickListner(and implement method click listener)并将您的函数 startActivity 移动到适配器代码,最后将 startActivity 放入listItemView.setOnClickListner并从您的Main 中删除listView.setOnItemClickListener代码

Note : edit startActivity new Intent(MainActivity.this, Song1Activity.class) with new Intent(getcontext(), Song1Activity.class) After move to your adapter注意:使用new Intent(getcontext(), Song1Activity.class)编辑 startActivity new Intent(MainActivity.this, Song1Activity.class) new Intent(getcontext(), Song1Activity.class)后移动到您的适配器

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

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

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