Java 带有XML db的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%,因

让我首先描述一下我的意图。我有一个XML数据库,里面有一些民间歌曲和歌词。对于我的家人和朋友,我想开发一个android应用程序,它将按A-Z顺序列出歌曲,点击/触摸歌曲标题后,会出现一条文本/歌词(这样我们都可以唱相同的词)

我不太熟悉Java和Android的开发,但是我成功地创建了一个应用程序,在第一个
活动中有一个按钮“显示所有歌曲”,按下按钮后,另一个
活动
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个意图或活动。你可以只使用一个