将信息从子类传递到超类以确定NavigationDrawer onItemClick的实现

时间:2014-11-11 04:08:39

标签: java android

我的应用仅在某些活动中使用导航抽屉。我想修改它们扩展的基本活动,而不是复制每个活动中的代码,因此导航抽屉代码只在一个地方。问题是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();
    }
}

如果我不清楚,请告诉我。我感谢任何帮助。谢谢!

2 个答案:

答案 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;
    }
    ...
}