- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
已编辑:
问题:我试图将艺术家的详细信息从我的列表显示到一个 fragment ,但我有一个 CustomAdapter 我正在使用,所以当我的应用程序逻辑如下时,我不知道如何实现这一点:
ListViewAdapter.java
--> MainFragment.java
--> SongFragment.java
(我必须从适配器到一个 fragment 再到另一个 fragment ,这给我带来了麻烦) 当我转到 SongFragment 时,我试图设置艺术家的名字、歌曲名称 和图像。 Java
但我的 setOnItemClickListener
在 MainFragment.java
中。
这里有一个演示
步骤:
setOnItemClickListener
) This is my customListView SongFragment
并显示有关歌手的信息(艺术家、歌曲名称、艺术家的图像) This is my SongFragment
after i clicked on a song 我的 ListViewAdapter
代码:
public class ListViewAdapter extends BaseAdapter {
//Create variables
MediaPlayer mediaPlayer;
int layout;
Song currentSong;
ArrayList<Song> arrayList;
Context context;
public ListViewAdapter(int layout, ArrayList<Song> arrayList, Context
context) {
this.layout = layout;
this.arrayList = arrayList;
this.context = context;
}
private class Viewholder {
TextView artistTxt, songNameTxt;
ImageView playB, stopB;
CircleImageView artistImg;
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
final Viewholder viewholder;
if (view == null) {
viewholder = new Viewholder();
LayoutInflater layoutInflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(layout, null);
viewholder.artistTxt = (TextView) view.findViewById(R.id.artistTxt);
viewholder.songNameTxt = (TextView)
view.findViewById(R.id.songNameTxt);
viewholder.playB = (ImageView) view.findViewById(R.id.playB);
viewholder.stopB = (ImageView) view.findViewById(R.id.stopB);
viewholder.artistImg = (CircleImageView)
view.findViewById(R.id.artistImg);
view.setTag(viewholder);
} else {
viewholder = (Viewholder) view.getTag();
}
final Song song = arrayList.get(position);
viewholder.artistImg.setImageResource(song.getArtistImg());
viewholder.artistTxt.setText(song.getArtist());
viewholder.songNameTxt.setText(song.getSongName());
//get all songs
mediaPlayer = MediaPlayer.create(context, song.getSong());
viewholder.playB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (currentSong == null) {
mediaPlayer = MediaPlayer.create(context, song.getSong());
}
//if mediaplayer is not null and my current song is not equal to
//the new song i clicked on
if (mediaPlayer != null && currentSong != song) {
//resets the mediaplayer and creates a new song from the
//position in the list
mediaPlayer.reset();
mediaPlayer = MediaPlayer.create(context, song.getSong());
viewholder.playB.setImageResource(R.drawable.play_black);
mediaPlayer.start();
viewholder.playB.setImageResource(R.drawable.pause_black);
} else {
mediaPlayer.pause();
viewholder.playB.setImageResource(R.drawable.play_black);
}
//check if current song is null or the newly clicked song is
//equal to my current song
//if true then assign the newly clicked song as my CURRENT one
//--so it doesnt play the same song for every single one
if (currentSong == null || song != currentSong) {
currentSong = song;
}
}
});
//stop song
viewholder.stopB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//stops my current song and make it null
if (currentSong != null) {
mediaPlayer.stop();
mediaPlayer.release();
currentSong = null;
viewholder.playB.setImageResource(R.drawable.play_black);
}
}
});
return view;
}
我的 MainFragment.java
我将歌曲添加到列表并调用我的适配器:
public class MainFragment extends Fragment {
//Declare variables
ArrayList<Song> arrayList;
ListView songListView;
ListViewAdapter adapter;
SongFragment songFragment;
FragmentManager fragmentManager;
FragmentTransaction fragmentTransaction;
@Nullable
@Override
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
//Find my listview
songListView = (ListView) view.findViewById(R.id.songListView);
//create a new arraylist object
arrayList = new ArrayList<>();
//Add songs to my list
arrayList.add(new Song("Beyonce", "-Formation", R.raw.beyonce_formation, R.drawable.beyonce));
arrayList.add(new Song("Chris Brown", "-Hope You Do", R.raw.chrisbrown_hopeyoudo, R.drawable.chrisbrown));
arrayList.add(new Song("Akon ft. Colby'O'Donis", "-Beautiful", R.raw.akon_beautiful_ft_colbyodonis_kardinaloffishall, R.drawable.akon));
arrayList.add(new Song("Akon", "-Beautiful", R.raw.akon_dontmatter, R.drawable.akon));
arrayList.add(new Song("Akon", "-Locked Up", R.raw.akon_lockedup_ft_stylesp, R.drawable.akon));
arrayList.add(new Song("Ava Max", "-Sweet but Psycho", R.raw.avamax_sweetbutpsycho, R.drawable.avamax));
arrayList.add(new Song("Tupac and Biggie ft. Akon Remix", "-Ghetto", R.raw.tupacbiggieakon_ghetto, R.drawable.biggie));
//Create a new adapter of my custom adapter and assign its values
adapter = new ListViewAdapter(R.layout.listview_customlayout, arrayList, getActivity());
//Set my listview to my custom adapter
songListView.setAdapter(adapter);
//Click on a specific song from my list
songListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Initiliaze my songFragment to my fragment class
songFragment = new SongFragment();
//call FragmentManager and begin the transaction to my songFragment class
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
//When clicked on a listview item - navigate to songfragment and when clicked back -> go back to mainfragment
//save my mainfragment to my stack so it isnt destroyed but kept safe so i can get back to it
fragmentTransaction.replace(R.id.fragment_container, songFragment).addToBackStack(null).commit();
}
});
//return my view
return view;
}
}我的customListView.xml
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/artistImg"
android:layout_width="50sp"
android:layout_height="50sp"
android:src="@drawable/musiclogo"
app:civ_border_color="@color/white"
app:civ_border_width="2dp" />
<TextView
android:id="@+id/artistTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/artistImg"
android:text="Artist"
android:textColor="@color/black"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/songNameTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/artistTxt"
android:layout_toRightOf="@id/artistImg"
android:text="Song Name"
android:textColor="#11ca6b" />
<ImageView
android:id="@+id/playB"
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_marginTop="4sp"
android:layout_toLeftOf="@id/stopB"
android:src="@drawable/play_black" />
<ImageView
android:id="@+id/stopB"
android:layout_width="30sp"
android:layout_height="30sp"
android:layout_alignParentRight="true"
android:layout_marginTop="4sp"
android:src="@drawable/stop_black" />
</RelativeLayout>
我的fragment_song.xml
布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/constrainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@id/artistImg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.4"
android:background="@color/black"
android:scaleType="centerCrop"
android:src="@drawable/edsher" />
<de.hdodenhof.circleimageview.CircleImageView
android:id="@id/artistImg"
android:layout_width="250sp"
android:layout_height="250sp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="75sp"
android:src="@drawable/edsher"
app:civ_border_color="@color/white"
app:civ_border_width="2sp" />
<TextView
android:id="@id/songNameTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/artistImg"
android:layout_centerInParent="true"
android:layout_marginTop="10sp"
android:text="Song name" />
<TextView
android:id="@+id/currentSongLenght"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/songNameTxt"
android:layout_marginTop="9sp"
android:layout_toLeftOf="@id/songLenght"
android:text="03:00" />
<TextView
android:id="@+id/currentSongLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/songNameTxt"
android:layout_marginTop="9sp"
android:layout_toRightOf="@id/songLenght"
android:text="-02:20" />
<SeekBar
android:id="@+id/songLenght"
android:layout_width="300sp"
android:layout_height="wrap_content"
android:layout_below="@id/songNameTxt"
android:layout_centerInParent="true"
android:layout_marginTop="10sp" />
<ImageView
android:id="@+id/previousB"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_below="@id/songLenght"
android:layout_toLeftOf="@id/playB"
android:src="@drawable/previous" />
<ImageView
android:id="@id/playB"
android:layout_width="70sp"
android:layout_height="70sp"
android:layout_below="@id/songLenght"
android:layout_centerInParent="true"
android:src="@drawable/play_big" />
<ImageView
android:id="@+id/nextB"
android:layout_width="60sp"
android:layout_height="60sp"
android:layout_below="@id/songLenght"
android:layout_toRightOf="@id/playB"
android:src="@drawable/next" />
<ImageView
android:id="@+id/favoriteB"
android:layout_width="40sp"
android:layout_height="40sp"
android:layout_below="@id/songLenght"
android:layout_alignParentEnd="true"
android:layout_marginTop="10sp"
android:src="@drawable/favorite" />
</RelativeLayout>
最佳答案
你可以让你的Song
Serializable
:class Song implements Serializable{
然后将类传递到您的包中。
Bundle bundle = new Bundle();
bundle.putSerializable("song", song);
songFragment.setArguments(bundle);
在您的 SongFragment
中,您应该获得参数:
public class SongFragment extends Fragment {
@Nullable
@Override
public View onCreateView( /* .... */){
Song song = getArguments().getSerializable("song");
}
}
如果您不想使用参数(我肯定会使用参数),我会在我的 SongFragment
中创建一个方法,它将接收我需要的所有数据,我会在我的mainFragment
使用 SongFragment
实例。
像这样:
public class SongFragment extends Fragment {
String artist;
String song;
int name;
int image;
TextView nameText, artistText;
/* all my code .... */
@Nullable
@Override
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
nameText = view.findByViewId(R.id.my_name_id);
artistText = view.findByViewId(R.id.my_artist_id);
}
public getSongData(String artist, String song, int name, int image){
this.artist = artist;
this.song = song;
this.name = name;
this.image = image;
nameText.setText(name);
artistText.setText(artist);
}
}
在您的 songListView.setOnItemClickListener
中的 MainFragment 中:
songListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
songFragment = new SongFragment();
// -----> HERE <-----
songFragment.getSongData(song.getArtist(), song.getSongName(), song.getName(), song.getArtistImg());
// -----> HERE <-----
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, songFragment).addToBackStack(null).commit();
}
});
关于java - 使用 onClickListView 将数据从 CustomAdapter 发送到 SubFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53420913/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!