2013-04-26 102 views
0

我必須在所有活動中顯示一個自定義視圖,並且我想在一個普通的類中這樣做。通過擴展一個擴展的類來爲通用的一組功能使用通用類活動

假設我有這三項活動,即

Activity_1 

Activity_2 

Activity_3 

,共同活動MainActivity

我想在所有3項活動中顯示一個共同的xml

我還需要在一個普通的地方設置點擊監聽器,這樣我只需要在需要時進行更改。

我知道這是一個相當多的oops相關的問題。

這是我做了什麼:

活動一:

public class ActivityOne extends CommonActivity{ 


Button button1; 

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

    button1=(Button)findViewById(R.id.button1); 

    button1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Intent i=new Intent(ActivityOne.this,OtherActivity.class); 
      startActivity(i); 

     } 
    }); 
} 

} 

ActivityOne XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Activity1" /> 

    <include 
    android:id="@+id/header_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    layout="@layout/common" /> 

主要活動:

public class MainActivity extends Activity { 

Button button1; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    button1=(Button)findViewById(R.id.button1); 


    button1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Intent i=new Intent(MainActivity.this,ActivityOne.class); 
      startActivity(i); 

     } 
    }); 

} 

} 

MainActivity XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

    <Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/textView1" 
    android:layout_alignRight="@+id/textView1" 
    android:text="Button1" /> 

</RelativeLayout> 

CommonActivity

public class CommonActivity extends Activity{ 
private Button button1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.common); 


    button1=(Button)findViewById(R.id.button1); 

    button1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Toast.makeText(CommonActivity.this, "Common Clicked", Toast.LENGTH_SHORT).show(); 

     } 
    }); 

} 

} 

CommonActivity XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" > 

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Common"/> 

</LinearLayout> 

現在,當我從Activityone點擊按鈕共同舉杯沒有顯示。 我必須做更多,或者我做錯了什麼。

+1

那麼,什麼是問題呢?你有什麼麻煩?你寫了什麼代碼,它與你想要的有什麼不同? – 2013-04-26 08:42:43

+0

@AleksG用代碼更新了問題。 – zaiff 2013-04-26 10:46:30

回答

-1

JAVA HERITAGE !!

讓您的孩子擴展MainActivity,您在其中設置佈局方法。

或者使用尋呼機,然後刷卡。

0

您可以創建一個抽象類來擴展Activity,然後在那裏實現常用功能。您也可以編寫抽象方法,在擴展此類時需要實施 例如:

public abstract class MyAbstactActivity extends Activity{ 
    //for example for onCreate 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     //do your common stuff here and then overwrite it when you need to custumize 
    } 
    public abstract doStuff();//Must implement this when you extend MyAbstractClass 


    } 

    public class MyActivity extends MyAbstactActivity { 
    public abstract doStuff(){//Code} 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    //do your work as usual. 
    //setContentView(R.layout.main)--> is not needed but of course you can change the layout 

} 


}