Java 使用接口在所有活动上实现代码
我试图在每个活动中实现一些代码,不想将代码复制到每个活动中 最初我只是有一个带有代码的父活动,然后扩展了所有其他活动,但我无法在ListActivities或ExpandableListActivities上执行此操作 我认为这将通过使用接口类来完成,然后让每个活动实现这一点。但是,当我尝试执行此操作时,Eclipse给了我一个错误,并说要删除方法体 这是我到目前为止所拥有的Java 使用接口在所有活动上实现代码,java,android,Java,Android,我试图在每个活动中实现一些代码,不想将代码复制到每个活动中 最初我只是有一个带有代码的父活动,然后扩展了所有其他活动,但我无法在ListActivities或ExpandableListActivities上执行此操作 我认为这将通过使用接口类来完成,然后让每个活动实现这一点。但是,当我尝试执行此操作时,Eclipse给了我一个错误,并说要删除方法体 这是我到目前为止所拥有的 import android.content.Intent; import android.view.Menu; imp
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
public interface MenuOptions {
/**
* Method called when the hardware menu button is called. Uses optionmenu.xml for layout
*/
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.optionmenu, menu);
return true;
}
/**
* Event listener for the options menu. If home is pressed user is sent to home screen. If settings is pressed user is sent to setting screen
* User is passed as an extra
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent nextIntent = null;
switch (item.getItemId()) {
case R.id.home:
Toast.makeText(this, "You pressed the icon!", Toast.LENGTH_LONG).show();
nextIntent = new Intent(this, Home.class);
break;
case R.id.settings:
Toast.makeText(this, "You pressed the text!", Toast.LENGTH_LONG).show();
nextIntent = new Intent(this, Settings.class);
break;
}
nextIntent.putExtra("user", user);
startActivity(nextIntent);
return true;
}
}
接口
Java中的类应该只包含方法签名,而不包含实现。因此,您必须创建一个基类:
public class MenuOptions extends Activity {
/**
* Method called when the hardware menu button is called. Uses optionmenu.xml for layout
*/
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.optionmenu, menu);
return true;
}
/**
* Event listener for the options menu. If home is pressed user is sent to home screen. If settings is pressed user is sent to setting screen
* User is passed as an extra
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent nextIntent = null;
switch (item.getItemId()) {
case R.id.home:
Toast.makeText(this, "You pressed the icon!", Toast.LENGTH_LONG).show();
nextIntent = new Intent(this, Home.class);
break;
case R.id.settings:
Toast.makeText(this, "You pressed the text!", Toast.LENGTH_LONG).show();
nextIntent = new Intent(this, Settings.class);
break;
}
nextIntent.putExtra("user", user);
startActivity(nextIntent);
return true;
}
}
以及您的活动:
public class YourActivity extends MenuOptions {
/*...*/
}
接口不允许有方法体。这是因为它描述的是对象的接口,而不是方法本身
所有活动共享相同菜单选项的问题很常见。最简单的处理方法是定义2或3个超类(用于ListActivities和MapActivities)。据我所知,接口只描述实现接口的类必须支持的方法。 这就是实现接口和扩展类之间的区别。 -因此,您不能编写所有类都使用的接口,只能定义一组方法,这些方法必须由实现该接口的任何类定义 我想说,你最好的办法是创建一个新类,它可以被你的所有活动用来做同样的工作。然后,您将需要该类的一个实例,该实例由每个activity onCreate(或其他地方)创建和初始化 或者,您可能会发现,您可以将新类设置为静态,这样就不需要创建实例,只需在适当的时间调用静态方法即可
另一种方法是创建一个包含标准行为的活动子类,并将您的所有活动创建为该活动的子类。如果您有ListActivities(例如),您必须进行一些重新编码,使它们成为包含列表的子类活动好问题,我很想知道有趣的答案。您好,感谢您的回答,但此解决方案仍然意味着我有三个活动,它们的活动代码几乎完全相同,ListActivities和ExplableListActivities。您好,谢谢您的回复。看起来这可能是答案,只是感觉很笨重。