Java 将信息从子类传递到超类以确定NavigationMcClick的实现
我的应用程序仅在某些活动中使用导航抽屉。我希望修改它们扩展的基本活动,使导航抽屉代码仅位于一个位置,而不是在每个活动中复制代码。问题在于,Java 将信息从子类传递到超类以确定NavigationMcClick的实现,java,android,Java,Android,我的应用程序仅在某些活动中使用导航抽屉。我希望修改它们扩展的基本活动,使导航抽屉代码仅位于一个位置,而不是在每个活动中复制代码。问题在于,onItemClick方法会因活动而异。例如,在MainActivity中按“Home”应该什么都不做,因为我们已经在“Home”了。在ListActivity中按“Home”应该可以将我带到MainActivity (有关更多信息,请参阅我对自己问题的回答。当用户离开时,我将完成每个活动,并传递一个额外的消息通知下一个活动调用的活动是什么。这样做是为了避免当
onItemClick
方法会因活动而异。例如,在MainActivity
中按“Home”应该什么都不做,因为我们已经在“Home”了。在ListActivity
中按“Home”应该可以将我带到MainActivity
(有关更多信息,请参阅我对自己问题的回答。当用户离开时,我将完成每个活动,并传递一个额外的消息通知下一个活动调用的活动是什么。这样做是为了避免当用户通过设备返回按钮返回时抽屉关闭的动画。这样,当返回时,抽屉完全关闭,没有动画,因为活动已重新启动。)
我能做些什么来获得必要的信息给超类?我需要每个子类向超类传递某种信息。也许每个子类都能传递一个int来标识自己给超类,而超类可以使用这个int来确定在每种情况下该做什么?如果是这样的话,我不知道该怎么做可能
可能的超类BaseActivity
实现:
mDrawerList.setOnItemClickListener(new ListView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView parent, View view, int position, long id)
{
//passedParameter is an int that the subclass passes to the superclass to identify itself
switch(int passedParameter)
{
//int passed from subclass identifies it as MainActivity
case MAIN_ACTIVITY:
{
switch(position)
{
//HOME
case 0:
//do nothing since we're already at MainActivity/home
//LIST
case 1:
//go to ListActivity
}
}
//int passed from subclass identifies it as ListActivity
case LIST_ACTIVITY:
{
switch(position)
{
//HOME
case 0:
//go to MainActivity
//LIST
case 1:
//do nothing since we're already at ListActivity
}
}
}
}
});
public class MainActivity extends BaseActivity
{
//how to pass some parameter to BaseActivity from here?
@Override
protected Fragment createFragment()
{
return new MainFragment();
}
}
如何将必要的int
从子类传递到超类
BaseActivity
是抽象的:
public abstract class BaseActivity extends FragmentActivity
{
protected abstract Fragment createFragment();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
//navigation drawer code shown above, plus more
if (fragment == null)
{
fragment = createFragment();
fm.beginTransaction()
.add(R.id.fragmentContainer, fragment)
.commit();
}
}
}
子类将只有以下实现:
mDrawerList.setOnItemClickListener(new ListView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView parent, View view, int position, long id)
{
//passedParameter is an int that the subclass passes to the superclass to identify itself
switch(int passedParameter)
{
//int passed from subclass identifies it as MainActivity
case MAIN_ACTIVITY:
{
switch(position)
{
//HOME
case 0:
//do nothing since we're already at MainActivity/home
//LIST
case 1:
//go to ListActivity
}
}
//int passed from subclass identifies it as ListActivity
case LIST_ACTIVITY:
{
switch(position)
{
//HOME
case 0:
//go to MainActivity
//LIST
case 1:
//do nothing since we're already at ListActivity
}
}
}
}
});
public class MainActivity extends BaseActivity
{
//how to pass some parameter to BaseActivity from here?
@Override
protected Fragment createFragment()
{
return new MainFragment();
}
}
如果我不清楚,请告诉我。我感谢任何帮助。谢谢
我需要每个子类传递某种信息
到超类来确定mclick的实现
您可以创建要在子类中使用的受保护变量
超类中的示例:
protected boolean isLogin = false;
然后,您可以在子类的中设置isLogin
的值
更新
似乎您需要知道是什么类
通过使用实例
扩展了超类
。示例:
if(this instance of MainActivity.class)
将信息从子类传递到超类的一种方法:
在超类中
:
public abstract class BaseActivity extends FragmentActivity
{
protected abstract int sendSubActivity();
...
}
public class MainActivity extends BaseActivity
{
@Override
protected int sendSubActivity()
{
return CallingActivityInterface.MAIN_ACTIVITY;
}
...
}
在子类中
:
public abstract class BaseActivity extends FragmentActivity
{
protected abstract int sendSubActivity();
...
}
public class MainActivity extends BaseActivity
{
@Override
protected int sendSubActivity()
{
return CallingActivityInterface.MAIN_ACTIVITY;
}
...
}
谢谢你的回复。子类不会实现onItemClick
,但是-该代码只会在超类中调用,这样我就不必在多个类中重复它。我可以通过另一个方法传递信息吗?你想传递什么信息?我想使用受保护的变量(或方法)我认为传递一个简单的int就足够了。例如,传递0表示MainActivity
,传递1表示ListActivity
。然后在超类的onItemClick
方法中,我可以打开在第一个switch语句中传递的参数来确定要做什么。我将编辑我的question@pez我是我不会得到你想要的,但我会更新我的答案:)如果(MainActivity.class的这个实例)
看起来可以工作!我将很快尝试实现它并进行更新。