Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将信息从子类传递到超类以确定NavigationMcClick的实现_Java_Android - Fatal编程技术网

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的这个实例)
看起来可以工作!我将很快尝试实现它并进行更新。