Java 将与ListView单元格关联的数据传递给该项的另一个活动onClick()

Java 将与ListView单元格关联的数据传递给该项的另一个活动onClick(),java,android,android-studio,Java,Android,Android Studio,我是android编程新手。我正在使用ListView和自定义布局编写一个简单的音乐应用程序。列表中的每一行都有两个TextView的,分别表示歌曲名和艺术家名 我有两个活动,Main活动和nowPlaying活动,nowPlaying活动列表中也有两个TextView的。我想要实现的是,当我点击列表视图(在主活动中)上的一个项目时,我想要获得歌曲名称和艺术家名称,并将其设置为nowPlaying活动中的文本视图的 main活动 public class MainActivity extends

我是android编程新手。我正在使用
ListView
和自定义布局编写一个简单的音乐应用程序。列表中的每一行都有两个
TextView的
,分别表示歌曲名和艺术家名

我有两个活动,Main活动和nowPlaying活动,nowPlaying活动列表中也有两个
TextView的
。我想要实现的是,当我点击
列表视图
(在主活动中)上的一个项目时,我想要获得歌曲名称和艺术家名称,并将其设置为nowPlaying活动中的
文本视图的

main活动

public class MainActivity extends AppCompatActivity {

ListView listView;
ArrayList<Songs> song;

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

    song = new ArrayList<Songs>();
    song.add(new Songs("Shape of you", "ed sheeran", "4:59"));
    song.add(new Songs("Energy", "avelino", "3:15"));
    song.add(new Songs("Wages", "bad sounds", "2:56"));
    song.add(new Songs("L'Hiver Indien", "baloji", "3:28"));
    song.add(new Songs("Faded Heart", "Borns", "4:59"));
    song.add(new Songs("King Ruby", "ider", "4:59"));
    song.add(new Songs("Drown", "kovic", "4:59"));
    song.add(new Songs("Supercut", "lorde", "4:59"));
    song.add(new Songs("&Run", "sir sly", "4:59"));
    song.add(new Songs("Live in the moment", "portugal. the man", "4:59"));

    SongAdapter adapter = new SongAdapter(this, song);

    listView = findViewById(R.id.list_view);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            TextView songName = findViewById(R.id.song_name);
            TextView artistName = findViewById(R.id.artist);
            Intent intent = new Intent(MainActivity.this, nowPlaying.class);
            intent.putExtra("name", listView.getItemAtPosition(i).toString());
            startActivity(intent);
        }
    });
    listView.setAdapter(adapter);
}

}

你做的是对的,你只需要在附加内容中添加姓名和艺术家,并从第二个活动中获取他们

这里是如何修复onClick 如果需要发送歌曲对象,请搜索如何将歌曲类设置为parcelable

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
       String song_name= song.get(i).getSongName().toString();
        Intent intent = new Intent(MainActivity.this, nowPlaying.class);
        intent.putExtra("name",song_name );
        startActivity(intent);
    }
});
enter code here
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
字符串song_name=song.get(i).getSongName().toString();
意向意向=新意向(MainActivity.this,nowPlaying.class);
意图。putExtra(“名称”,宋_名称);
星触觉(意向);
}
});
在这里输入代码
按songName或artistName更改此项(listView.getItemAtPosition(i).toString())


在你的第二次活动中得到它

您希望将一些数据(在您的情况下是歌曲名称艺术家名称)传递给其他活动。因此,这可以通过意图传递所需的数据来实现,因为意图是消息传递对象,您可以将小块数据包装到意图中,以便在活动之间传递。因此,相同的代码是:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            TextView songName = view.findViewById(R.id.song_name);
            TextView artistName = view.findViewById(R.id.artist);
            Intent intent = new Intent(MainActivity.this, nowPlaying.class);
            intent.putExtra("song_name", songName.getText().toString());
            intent.putExtra("artist_name", artistName.getText().toString());
            startActivity(intent);
        }
    });
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
TextView songName=view.findViewById(R.id.song\u name);
TextView artistName=view.findViewById(R.id.artist);
意向意向=新意向(MainActivity.this,nowPlaying.class);
intent.putExtra(“song_name”,songName.getText().toString());
intent.putExtra(“artist_name”,artistName.getText().toString());
星触觉(意向);
}
});
onItemClick()方法中给出的视图是单击的视图(由适配器返回),因此您可以获取其内容并将其按原样传递给其他活动

替代方法:

除非声明为最终,否则无法访问onItemCLick()中的歌曲列表(歌曲数组列表)。因此,您可以按如下方式声明并访问它:

final ArrayList<Songs> songs = new ArrayList<Songs>() {{
    add(new Songs("Shape of you", "ed sheeran", "4:59"));
    add(new Songs("Energy", "avelino", "3:15"));
    add(new Songs("Wages", "bad sounds", "2:56"));
    add(new Songs("L'Hiver Indien", "baloji", "3:28"));
    add(new Songs("Faded Heart", "Borns", "4:59"));
    add(new Songs("King Ruby", "ider", "4:59"));
    add(new Songs("Drown", "kovic", "4:59"));
    add(new Songs("Supercut", "lorde", "4:59"));
    add(new Songs("&Run", "sir sly", "4:59"));
    add(new Songs("Live in the moment", "portugal. the man", "4:59"));
}}
final ArrayList songs=new ArrayList(){{
添加(新歌(“你的形状”、“埃德·希兰”、“4:59”);
增加(新歌(“能量”,“阿维利诺”,“3:15”));
添加(新歌(“工资”,“坏声音”,“2:56”));
增加(新歌(“Hiver Indien”,“baloji”,“3:28”);
添加(新歌(“褪色的心”,“出生”,“4:59”);
新增(新歌《红宝石王》、《伊德尔》、《4:59》);
添加(新歌(“溺水”、“科维奇”、“4:59”);
添加(新歌(“超级杯”,“上帝”,“4:59”);
添加(新歌(“&Run”,“sirssly”,“4:59”);
新增(新歌《活在当下》、《葡萄牙男人》、《4:59》);
}}
现在,您可以使用此歌曲列表在onItemClick()方法中获取数据,如下所示:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(MainActivity.this, nowPlaying.class);
                intent.putExtra("song_name", songs.get(i).getSongName()); // Note: If the getters are not set to get the song name and artist name then they need to be set to use this approach
                intent.putExtra("artist_name", songs.get(i).getArtistName());
                startActivity(intent);
            }
        });
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
意向意向=新意向(MainActivity.this,nowPlaying.class);
intent.putExtra(“song_name”,songs.get(i).getSongName());//注意:如果getter未设置为获取歌曲名称和艺术家名称,则需要设置为使用此方法
intent.putExtra(“artist_name”,songs.get(i).getArtistName());
星触觉(意向);
}
});

注意只需使用songName和artistName的getter和setter创建歌曲模型类 只需在Now PlayingActivity中按意图获取数据

public class MainActivity extends AppCompatActivity {

ListView listView;
ArrayList<Songs> song;

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

  final song = new ArrayList<Songs>();
    song.add(new Songs("Shape of you", "ed sheeran", "4:59"));
    song.add(new Songs("Energy", "avelino", "3:15"));
    song.add(new Songs("Wages", "bad sounds", "2:56"));
    song.add(new Songs("L'Hiver Indien", "baloji", "3:28"));
    song.add(new Songs("Faded Heart", "Borns", "4:59"));
    song.add(new Songs("King Ruby", "ider", "4:59"));
    song.add(new Songs("Drown", "kovic", "4:59"));
    song.add(new Songs("Supercut", "lorde", "4:59"));
    song.add(new Songs("&Run", "sir sly", "4:59"));
    song.add(new Songs("Live in the moment", "portugal. the man", "4:59"));

    SongAdapter adapter = new SongAdapter(this, song);

    listView = findViewById(R.id.list_view);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            TextView songName = findViewById(R.id.song_name);
            TextView artistName = findViewById(R.id.artist);
            Intent intent = new Intent(MainActivity.this, nowPlaying.class);
            intent.putExtra("songName", listView.get(i).getsongName());
            intent.putExtra("artistName", listView.get(i).getartistName());
            startActivity(intent);
        }
    });
    listView.setAdapter(adapter);
}
public类MainActivity扩展了AppCompatActivity{
列表视图列表视图;
阿雷利派歌曲;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.songs_列表);
最终歌曲=新ArrayList();
歌曲添加(新歌(“你的形状”、“埃德·希兰”、“4:59”);
歌曲添加(新歌(“能量”,“阿维利诺”,“3:15”);
歌曲添加(新歌(“工资”,“坏声音”,“2:56”));
歌曲添加(新歌(“Hiver Indien”,“baloji”,“3:28”);
歌曲添加(新歌(“褪色的心”,“出生”,“4:59”);
歌曲添加(新歌《红宝石王》、《伊德尔》、《4:59》);
歌曲添加(新歌(“溺水”,“科维奇”,“4:59”);
歌曲添加(新歌(“超级杯”,“上帝”,“4:59”);
歌曲添加(新歌(“&Run”,“sirssly”,“4:59”);
歌曲添加(新歌(“活在当下”,“葡萄牙,男人”,“4:59”);
SongAdapter=新的SongAdapter(这首歌);
listView=findViewById(R.id.list\u视图);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
TextView songName=findViewById(R.id.song\u name);
TextView artistName=findViewById(R.id.artist);
意向意向=新意向(MainActivity.this,nowPlaying.class);
intent.putExtra(“songName”,listView.get(i).getsongName());
intent.putExtra(“artistName”,listView.get(i).getartistName());
星触觉(意向);
}
});
setAdapter(适配器);
}
我试过这个
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(MainActivity.this, nowPlaying.class);
                intent.putExtra("song_name", songs.get(i).getSongName()); // Note: If the getters are not set to get the song name and artist name then they need to be set to use this approach
                intent.putExtra("artist_name", songs.get(i).getArtistName());
                startActivity(intent);
            }
        });
public class MainActivity extends AppCompatActivity {

ListView listView;
ArrayList<Songs> song;

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

  final song = new ArrayList<Songs>();
    song.add(new Songs("Shape of you", "ed sheeran", "4:59"));
    song.add(new Songs("Energy", "avelino", "3:15"));
    song.add(new Songs("Wages", "bad sounds", "2:56"));
    song.add(new Songs("L'Hiver Indien", "baloji", "3:28"));
    song.add(new Songs("Faded Heart", "Borns", "4:59"));
    song.add(new Songs("King Ruby", "ider", "4:59"));
    song.add(new Songs("Drown", "kovic", "4:59"));
    song.add(new Songs("Supercut", "lorde", "4:59"));
    song.add(new Songs("&Run", "sir sly", "4:59"));
    song.add(new Songs("Live in the moment", "portugal. the man", "4:59"));

    SongAdapter adapter = new SongAdapter(this, song);

    listView = findViewById(R.id.list_view);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            TextView songName = findViewById(R.id.song_name);
            TextView artistName = findViewById(R.id.artist);
            Intent intent = new Intent(MainActivity.this, nowPlaying.class);
            intent.putExtra("songName", listView.get(i).getsongName());
            intent.putExtra("artistName", listView.get(i).getartistName());
            startActivity(intent);
        }
    });
    listView.setAdapter(adapter);
}