0

我是編碼的初學者,我會喜歡一些幫助。我想做一個報警應用程序。在我的主要頁面片段中,我添加了一個按鈕,將一個警報添加到ScrollView內的LinearLayout中。該警報將包含三個TextViews和一個用於激活/停用的按鈕。給編號的動態創建視圖

這裏是我想我報警的樣子(這是目前沒有在我的編碼任何地方使用;我創造它只是有我的目標是什麼做的助視器):

<?xml version="1.0" encoding="utf-8"?> 

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="4dp" 
    android:id="@+id/alarm_fl" 
    android:background="@mipmap/white_box"> 

    <Button 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:layout_marginLeft="20dp" 
     android:layout_marginTop="9.5dp" 
     android:id="@+id/alarm_activation_button"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="70dp" 
     android:layout_marginTop="5dp" 
     android:textSize="10pt" 
     android:id="@+id/alarm_time"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="165dp" 
     android:layout_marginTop="11.5dp" 
     android:textSize="7pt" 
     android:id="@+id/alarm_ampm"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="70dp" 
     android:layout_marginTop="30dp" 
     android:textSize="5pt" 
     android:id="@+id/alarm_day"/> 

</FrameLayout> 

這是我如何目前正在測試中的片段我報警:

addAlarm.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 

      LayoutInflater alarm_inflater = (LayoutInflater) getContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
      ViewGroup parent = (ViewGroup) getActivity().findViewById(R.id.alarm_ll); 
      View alarm_view = alarm_inflater.inflate(R.layout.alarm_layout, parent); 

      TextView alarm_time = (TextView) alarm_view.findViewById(R.id.alarm_time); 
      alarm_time.setText("9시 45분"); 

      TextView alarm_ampm = (TextView) alarm_view.findViewById(R.id.alarm_ampm); 
      alarm_ampm.setText("오후"); 

      TextView alarm_day = (TextView) alarm_view.findViewById(R.id.alarm_day); 
      alarm_day.setText("월,화,수,목,금"); 

      Button activation_button = (Button) alarm_view.findViewById(R.id.alarm_activation_button); 
      activation_button.setBackgroundResource(R.mipmap.checkbox_deactivated); 
     } 
    }); 

其中alarm_ll是我想與新創建的警報來填充的LinearLayout。

在我看來,我需要每個Buttons和TextViews的獨特id來分別操作它們。

現在,這裏是我的問題:

  1. ,如果我想只要單擊該按鈕編程添加視圖這是正確的做法?還是有更好,更簡單的方法?

  2. 我的警報最終需要是對象。對於像User這樣的非活動類,或者在這種情況下,Alarm是否有可能擁有自己的佈局?

  3. 如何在通過點擊按鈕創建時爲每個視圖提供唯一的ID?

  4. 當我現在測試運行我的應用程序時,我添加到alarm_ll中的佈局將不會被保存,所以如果我轉移到另一個活動並返回,alarm_ll將被重置。當它們不是原始數據類型時,如何將它們保存在片段中?

我很抱歉一次問這麼多問題,但我真的很喜歡一些答案或建議。謝謝。

+0

爲每個視圖分配一個ID的目的是什麼?這個ID將用於什麼? –

回答

0
  1. 我假設你希望能夠設置多個報警。這是ListViewRecyclerView的完美使用,它允許您對相同視圖的多個副本進行充氣並根據一些底層數據顯示列表。

  2. 我建議您瞭解如何創建存儲數據的對象「模型」。這些「模型」對象應該與顯示數據的視圖對象分開。有幾種常用於這種分離的設計模式:模型 - 視圖 - 控制器,模型 - 視圖 - 演示者和模型 - 視圖 - 模型視圖。

  3. android:id在XML中通常用於在Java代碼中獲取視圖的對象。當您動態創建視圖時,無論是您在問題中展示的方式,還是通過膨脹XML,您都已擁有此對象,因此我不認爲需要爲這些動態創建的視圖分配ID。

  4. 當使用我在#2中建議的設計模式之一時,您還將創建一種存儲數據的方式。 Android提供了一個API來將信息存儲在數據庫中。通過使用「適配器」,可以很容易地將其顯示在ListViewRecyclerView中。

+0

非常感謝你! –