2016-08-19 2 views
1

Позвольте мне вначале описать мое намерение. У меня есть XML DB с некоторыми фольклорными песнями и лирикой. Для моей семьи и друзей я хочу разработать приложение для Android, которое будет перечислять песни в заказе A-Z, и после нажатия/касания названия песни появится текст/текст (чтобы мы все могли спеть одни и те же слова).Приложение для Android Songs с XML db

Я не очень хорошо знаком с Java и разработками Android, тем не менее, мне удалось создать приложение, где в первом Activity есть кнопка «Показать все песни» и после нажатия на нее еще один Activity с ListView списками песен (с использованием XMLPullHandler синтаксический анализатор). Collections.sort() заботится о заказе (хотя не 100%, потому что предметы, которые начинаются с национальных символов, доводятся до конца). Смотрите скриншот пожалуйста:

Screenshot of current functionality

Но теперь я не уверен, как приступить к отображению песни-текста. Мои идеи:

  1. Чтобы достигнуть того, что после нажатия на элемент появится новый SongActivity и покажет текст. Но тогда я должен создать, например. 100 намерений и действий, или я могу сделать это только с одним? В последнем случае - как приложение узнает, какой текст принадлежит к нажатой песне?
  2. Чтобы загрузить текст песни текст вместе с названием песни и показать его в ListView, но с атрибутом invisible (в 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> ... 

Может кто-то пожалуйста, дайте мне руку и руководство в этом? Я был бы очень благодарен.

On the picture is the actual status with visible values of variables

ответ

0

Чтобы добиться того, чтобы после нажатия элемента новой песни Активность будет появится и будет показывать текст. Но тогда я должен создать, например. 100 намерения и действия, или я могу сделать это только с одним? В последнем случае - как приложение узнает, какой текст принадлежит к нажатой песне?

Нет, вам не нужно писать 100 намерений или действий. Вы можете использовать только один, который более обобщен и удобен.

Чтобы загрузить текст песни текст вместе с названием песни и показать его в ListView, но с атрибутом «невидимым» (в HTML это ясно, но в Java - я не уверен .. .)

Хотя ваш вопрос не очень ясен, я думаю, вам нужно показать название песни вместе с текстом в качестве вторичного текста. Вы пытаетесь использовать атрибут invisible, дает мне смысл скрывать вторичный текст, и как только элемент списка щелкнул, сделайте видимым вторичный текст - это то, что он?

Если я правильно вас понял, вам необходимо изменить адаптер, который вы используете для своего RecyclerView.Вам нужно настроить свой адаптер и привязать каждый элемент вашего списка, вам нужно показать/скрыть вторичный текст самостоятельно, отслеживая, какой элемент выбран.

Я предлагаю вам использовать RecyclerView, чтобы показать список композиций в списке. Чтобы реализовать RecyclerView с помощью пользовательского адаптера, вы найдете много документации по Интернету. Здесь я прилагаю один пример.

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 
     } 
    } 
} 
+0

Спасибо за ваш комментарий Reaz, я попробую его и посмотрю, смогу ли я заставить его работать. – sujanko

+0

Привет, Reaz, поэтому я решил для первого варианта. В любом случае, добавлен OnItemClickListener в мой класс, поэтому я знал, на какой элемент был нажат. Это прекрасно работает. Итак, из моего POV моего новичка это выглядит так: у меня есть список с данными (имена песен) и массив с именем piesne, который содержит всю информацию (также особенно text_piesne). Кроме того, я знаю, какая строка (название песни) была нажата. Возможно ли, когда щелкнет строка, чтобы открыть новое представление и передать новому действию текст из переменной text_piesne? Если да, то как я могу получить доступ, например. piesne [5] .text_piesne? Спасибо – sujanko

+0

Я не полностью понял ваше требование, поскольку уже упомянул, как вы можете передавать данные между 'Activity'. В любом случае, если вам нужно больше объяснить проблему, напишите другой вопрос в StackOverflow и дайте ссылку на этот вопрос здесь, чтобы я мог получить уведомление об этом. Я тоже посмотрю на этот вопрос. Благодарю. –

Смежные вопросы