2011-09-23 14 views
1

我有一個基類,它有一堆按鈕,這些按鈕將在我的所有活動中用作通用導航欄。在活動中繼承與上下文的方法

public abstract class GenericActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_menu); 

    final Button buttonFinder = (Button) findViewById(R.id.buttonNavigationFinder); 
    buttonFinder.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent IndexActivity = new Intent(GenericActivity.this, Finder.class);  
      GenericActivity.this.startActivity(IndexActivity); 
     } 
    }); 

    final Button buttonIndex = (Button) findViewById(R.id.buttonNavigationIndex); 
    buttonIndex.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent IndexActivity = new Intent(GenericActivity.this, Index.class);  
      GenericActivity.this.startActivity(IndexActivity); 
     } 
    }); 

    final Button buttonStart = (Button) findViewById(R.id.buttonNavigationStart); 
    buttonStart.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent IndexActivity = new Intent(GenericActivity.this, MainMenu.class);  
      GenericActivity.this.startActivity(IndexActivity); 
     } 
    });  
} 
} 

我然後繼承該活動在另一個活動

public class Index extends GenericActivity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.index); 
} 
} 

索引布局的XML文件具有相同的ID作爲基類的按鈕。當我開始索引活動時,我的模擬器崩潰。幫幫我!

編輯:Stacktrace,但我似乎無法得到整個跟蹤。 logcat的表演 「...... 11多個」 末 http://pastebin.com/v64RyG2S

+0

你可以從logcat發佈stacktrack嗎? – slayton

+0

現在就添加它,我想。 :)該程序被稱爲「cloudtool」,如堆棧跟蹤 –

回答

2

試試這個:

GenericActivity刪除setContentView(R.layout.main_menu);

什麼main_menu.xml有?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    setContentView(R.layout.index); 
    super.onCreate(savedInstanceState); 
} 
+0

哇,實際上現在工作了!我像你一樣改變了onCreate方法。爲什麼這個工作? (我需要15個代表才能投票回答你的回答) –

+0

GenericActivity不需要setContentView()。如果你調用它2次,第二次會替換第一次的內容。 – Rodrigo

+0

不同之處在於對創建索引的更改。爲什麼在兩條線路上切換位置會導致活動起作用? –

0

好吧,我想你想顯示在您的所有觀點相同的菜單(main_menu.xml):

,並更改這些方法對Index類調​​用順序。正確?。

你所有的調用setContentView 2次在同一個活動...所以在最好的情況下,第二個佈局覆蓋第一個。

所以,我有一個想法:你可以重寫GenericActivity的方法的setContentView,寫這樣的事情:

首先,你必須預留指數活動查看一個空間,在你MAIN_MENU佈局,例如:

.... 
<LinearLayout android:id="@+id/childActivity" ...></LinearLayout> 
<Button android:id="@+id/buttonNavigationFinder" ...></Button> 
<Button android:id="@+id/buttonNavigationIndex" ...></Button> 
<Button android:id="@+id/buttonNavigationStart" ...></Button> 
.... 

然後你要刪除的onCreate或做:

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

最後:

public void setContentView(int resource){ 

    super.setContentView(R.layout.main_menu); // ---> Attention it's main_menu <--- 

    final Button buttonFinder = (Button) findViewById(R.id.buttonNavigationFinder); 
    buttonFinder.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent IndexActivity = new Intent(GenericActivity.this, Finder.class);  
      GenericActivity.this.startActivity(IndexActivity); 
     } 
    }); 

    final Button buttonIndex = (Button) findViewById(R.id.buttonNavigationIndex); 
    buttonIndex.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent IndexActivity = new Intent(GenericActivity.this, Index.class);  
      GenericActivity.this.startActivity(IndexActivity); 
     } 
    }); 

    final Button buttonStart = (Button) findViewById(R.id.buttonNavigationStart); 
    buttonStart.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent IndexActivity = new Intent(GenericActivity.this, MainMenu.class);  
      GenericActivity.this.startActivity(IndexActivity); 
     } 
    }); 


    //And now you have to fill the space for the child Activity with Index (or others) Activity view 
    LinearLayout childActivity = (LinearLayout) generalView.findViewById(R.id.childActivity); 
    View activityView = View.inflate(this,resource,null); //--> Now it's resource <-- 
    childActivity.add(activityView); 
} 

這是一個想法,我希望它能幫助你。