2014-05-14 51 views
1

我在一個應用程序中有幾個活動,我正在寫,我想在頁面上放置一個表單。除了不同的標題和文字外,所有活動都採用相同的形式。Android自定義可重用控件?

而不是重寫每個活動的控件和邏輯我正在尋找一種方法來創建我自己的控件,我可以把我的佈局xml文件與我自己的屬性,所以我需要做的就是寫它只需一次,並在需要的地方使用該控件。

我該怎麼做這樣的事情?

感謝

回答

0

可以代替延長android.app.Activity的使用延伸android.app.Activity一個活動,並定義其常用logic.Then所有其他活動將擴展它。然後他們會繼承它,並且你可以覆蓋你想要覆寫的內容。 如果你有完全相同的佈局和一些差異,這個解決方案並不壞,你只能加載layout.xml一次,然後在你喜歡的子類中使用它。

超類:

public SuperClass extends Activity{ 

    protected TextView myTextView; 

    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_layout); 

    myTextView = (TextView) findViewById(R.id.my_text_view); 

    } 
} 

ChildClassA:

public ChildClassA extends SuperClass { 

    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_layout); 

    myTextView.setText("I am in A"); 

    } 
} 

ChildClassB:

public ChildClassB extends SuperClass { 
     @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 

     setContentView(R.layout.my_layout); 

     myTextView.setText("I am in B"); 

     } 
} 

其他建議: 另一個想法是創建一個custom view。也看到這個tutorial也。

+0

但對於屏幕上的控制等同?像文本框和按鈕?我需要它作爲一個控件,所以我也可以把它放在我想要的每個使用它的活動上。 – developer82

+0

我更新了我的答案,試圖提供更多幫助,並回答最後一個問題。 –

0

把你的控件寫成android片段怎麼樣?在xml中,您可以聲明一個FrameLayout,然後使用FragmentTransaction的replace()方法在其中插入片段。

+0

它支持舊的Android設備(我的理解是片段是新的)。你能指點我一些關於這個問題的指南/文件嗎?謝謝。 – developer82

+1

使用兼容性庫支持片段到Android 1.6:http://developer.android.com/guide/components/fragments.html – einschnaehkeee

0

取決於您在每項活動中的差異以及您如何訪問它們。

如果只有一些字符串不同,請將這些字符串放在Intent中,這些字符串將啓動Activities並在onCreate()中獲取它們。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.lyt_template_form); 

    ((TextView) findViewById(R.id.txt_form_headline)).setText(getIntent().getStringExtra("headline"); 
    ((TextView) findViewById(R.id.txt_form_subtitle1)).setText(getIntent().getStringExtra("subtitle1"); 
    //etc... 

如果在你的控制代碼的差異,你需要區分某種「表單類型A」,「形態B型」,等等,你可以把一個指標你的意圖內檢查在代碼中做出不同的決定。

因此,例如,

if (getArguments().getInt("Type") == 0) { 
    // do stuff in control like this 
} else if (getArguments().getInt("Type") == 1) { 
    // do stuff in control like this 
// etc. 

getArgument()getIntent().getXyzExtra()