我的应用仅在某些活动中使用导航抽屉。我想修改它们扩展的基本活动,而不是复制每个活动中的代码,因此导航抽屉代码只在一个地方。问题是onItemClick
方法会因活动而异。例如,在MainActivity
中按“主页”应该什么都不做,因为我们已经在“家”。在ListActivity
中按“主页”可以转到MainActivity
。
(请参阅我对自己的问题here的回答以获取更多信息。当用户离开时,我正在完成每项活动,并传递额外信息以通知下一个活动调用活动是什么这样做是为了避免当用户通过设备返回按钮返回时抽屉关闭的动画。这样,当他们返回时,抽屉完全关闭而没有动画,因为活动已经重新启动。)
如何获取超类的必要信息?我需要每个子类将某种信息传递给超类。也许每个子类都可以传递一个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
}
}
}
}
});
我怎样才能将必要的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();
}
}
}
子类只有这个实现:
public class MainActivity extends BaseActivity
{
//how to pass some parameter to BaseActivity from here?
@Override
protected Fragment createFragment()
{
return new MainFragment();
}
}
如果我不清楚,请告诉我。我感谢任何帮助。谢谢!
答案 0 :(得分:1)
我需要每个子类传递某种信息 到超类来确定onItemClick的实现
您可以创建要在子类中使用的受保护变量。
superclass
中的示例:
protected boolean isLogin = false;
然后,您可以在isLogin
subclass's
中设置onItemClick
的值。
<强>更新强>
您似乎需要知道class
使用superclass
扩展instance of
的内容。示例:
if(this instance of MainActivity.class)
答案 1 :(得分:0)
一种将信息从子类传递到超类的方法:
在superclass
:
public abstract class BaseActivity extends FragmentActivity
{
protected abstract int sendSubActivity();
...
}
在subclass
:
public class MainActivity extends BaseActivity
{
@Override
protected int sendSubActivity()
{
return CallingActivityInterface.MAIN_ACTIVITY;
}
...
}