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