Java 带有XML db的Android歌曲歌词应用程序
让我首先描述一下我的意图。我有一个XML数据库,里面有一些民间歌曲和歌词。对于我的家人和朋友,我想开发一个android应用程序,它将按A-Z顺序列出歌曲,点击/触摸歌曲标题后,会出现一条文本/歌词(这样我们都可以唱相同的词) 我不太熟悉Java和Android的开发,但是我成功地创建了一个应用程序,在第一个Java 带有XML db的Android歌曲歌词应用程序,java,android,xml,listview,android-intent,Java,Android,Xml,Listview,Android Intent,让我首先描述一下我的意图。我有一个XML数据库,里面有一些民间歌曲和歌词。对于我的家人和朋友,我想开发一个android应用程序,它将按A-Z顺序列出歌曲,点击/触摸歌曲标题后,会出现一条文本/歌词(这样我们都可以唱相同的词) 我不太熟悉Java和Android的开发,但是我成功地创建了一个应用程序,在第一个活动中有一个按钮“显示所有歌曲”,按下按钮后,另一个活动用ListView列出歌曲(使用XMLPullHandler解析器)Collections.sort()负责排序(虽然不是100%,因
活动中有一个按钮“显示所有歌曲”,按下按钮后,另一个活动用ListView
列出歌曲(使用XMLPullHandler
解析器)Collections.sort()
负责排序(虽然不是100%,因为以国家字符开头的项目会被推到末尾)。请看截图:
但现在我不确定如何继续显示歌曲文本。我的想法是:
要实现这一点,单击一个项目后,将出现一个新的SongActivity
,并显示歌词。但是我应该创建100个意图和活动,或者我可以只用一个吗?在后一种情况下,应用程序如何知道哪些文本属于单击的歌曲
将歌词文本与歌曲标题一起加载,并在<代码>列表视图中显示,但带有属性<代码>不可见<代码>(在html中很清楚,但在java中-我不确定…)
xml文件中的歌曲示例:
<songs>
<song>
<id>1</id>
<title>Zvalila sa skala</title>
<lyrics>1. [:Zvalila sa skala z vŕšku do Dunaja,:]
[:prenes ma, má milá, prenes ma, má milá, veď je voda malá.:]
2. [:Ja bych ťa preniesla, hoc by bola väčšia,:]
[:ale že som ti nie, ale že som ti nie, tvoja najmilejšia.:]
3. [:Keby ja vedela, kde môj milý býva,:]
[:zaletela by som, zaletela by som, na jeho biely dom.:]
</lyrics>
<type>Valčík</type>
</song> ...
1.
兹瓦利拉萨斯卡拉
1.[:Zvalila sa skala z vŕšku do Dunaja,:]
[:prenes ma,mámilá,prenes ma,mámilá,veďje voda mala.:]
2.[:Ja bychťa preniesla,bola väčšššia主持的特别会议,:]
[:aleže som ti nie,aleže som ti nie,tvoja najmilejšia.:]
3.[:Keby ja vedela,kde môj milýbýva,:]
[:索姆写的萨莱特拉,索姆写的萨莱特拉,na jeho biely dom.:]
瓦尔契克
...
有人能在这方面给我帮助和指导吗?我将不胜感激
要实现这一点,点击一个项目后,一个新的歌曲活动将
出现并将显示歌词。但是我应该创建例如100
意图和活动,或者我可以只用一个吗?后来
案例-应用程序如何知道哪些文本属于单击的歌曲
不,你不必写100个意图或活动。您可以只使用一种更通用、更方便的方法
将歌词文本与歌曲标题一起加载并显示
在listview中,但具有属性“不可见”(在html中是不可见的)
清楚,但用java-我不确定…)
虽然你的问题不是很清楚,但我想你需要显示歌曲的标题以及一些文本作为辅助文本。您试图使用不可见的属性让我感觉到隐藏了次要文本,一旦单击列表项,就会使次要文本可见-是吗
如果我没有弄错,那么您需要修改用于RecyclerView
的适配器。您需要自定义适配器,并且在绑定列表的每个元素时,您需要通过跟踪所选项目来显示/隐藏辅助文本
我建议您使用RecyclerView
在列表中显示歌曲列表。要使用自定义适配器实现RecyclerView
,您可以在internet上找到大量文档。这里我附上一个例子
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
// Define the ViewHolder for list item
public class NormalViewHolder extends ViewHolder {
public NormalViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do whatever you want on clicking the list items
}
});
}
}
// And now in onCreateViewHolder you have to pass the correct view
// while populating the list item.
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_normal, parent, false);
NormalViewHolder vh = new NormalViewHolder(v);
return vh;
}
// Now bind the viewholders in onBindViewHolder
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
try {
if (holder instanceof NormalViewHolder) {
NormalViewHolder vh = (NormalViewHolder) holder;
vh.bindView(position);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getItemCount() {
if (data == null) {
return 0;
}
// data is the ArrayList of items you want to show in your list
return data.size();
}
// Now define getItemViewType of your own.
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
// Now set the default ViewHolder for NormalViewHolder
public class ViewHolder extends RecyclerView.ViewHolder {
// Define elements of a row here
public ViewHolder(View itemView) {
super(itemView);
// Find view by ID and initialize here
}
public void bindView(int position) {
// bindView() method to implement actions
}
}
}
公共类MyAdapter扩展了RecyclerView.Adapter{
//定义列表项的ViewHolder
公共类NormalViewHolder扩展了ViewHolder{
公共NormalViewHolder(视图项视图){
超级(项目视图);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//单击列表项即可执行任何操作
}
});
}
}
//现在在onCreateViewHolder中,您必须传递正确的视图
//填充列表项时。
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
观点五;
v=LayoutInflater.from(parent.getContext()).flate(R.layout.list\u item\u normal,parent,false);
NormalViewHolder vh=新的NormalViewHolder(v);
返回vh;
}
//现在在onBindViewHolder中绑定ViewHolder
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
试一试{
if(NormalViewHolder的holder实例){
NormalViewHolder vh=(NormalViewHolder)支架;
vh.bindView(位置);
}
}捕获(例外e){
e、 printStackTrace();
}
}
@凌驾
public int getItemCount(){
如果(数据==null){
返回0;
}
//数据是要在列表中显示的项目的数组列表
返回data.size();
}
//现在定义自己的getItemViewType。
@凌驾
public int getItemViewType(int位置){
返回super.getItemViewType(位置);
}
//现在为NormalViewHolder设置默认的ViewHolder
公共类ViewHolder扩展了RecyclerView.ViewHolder{
//在此处定义行的元素
公共视图持有者(视图项视图){
超级(项目视图);
//按ID查找视图并在此处初始化
}
公共视图(内部位置){
//用于实现操作的bindView()方法
}
}
}
要实现这一点,点击一个项目后,一个新的歌曲活动将
出现并将显示歌词。但是我应该创建例如100
意图和活动,或者我可以只用一个吗?后来
案例-应用程序如何知道哪些文本属于单击的歌曲
不,你不必写100个意图或活动。你可以只使用一个