实现谷歌+幻灯片菜单的最佳方式?

时间:2012-08-25 14:28:32

标签: android menu implementation

我是一个新手Android开发人员,正在尝试构建一个使用菜单中的fly(类似于google +,fb,steam,youtube)的应用程序。我发现https://github.com/jfeinstein10/SlidingMenu可以很好地满足我的需求。现在我的问题是,使用这个库的最有效方法是什么

这是我的一项活动

public class ExampleActivity2 extends SlidingActivity implements OnItemClickListener{

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setBehindContentView(R.layout.list);
        getSlidingMenu().setBehindOffsetRes(R.dimen.actionbar_home_width);
        Button btn = (Button) findViewById(R.id.button);

        //ListClass l=new ListClass(getApplicationContext());

        ListView lv=(ListView) findViewById(R.id.lvname);
        String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
                  "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                  "Linux", "OS/2" };
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                  android.R.layout.simple_list_item_1, android.R.id.text1, values);

                // Assign adapter to ListView
                lv.setAdapter(adapter); 
                lv.setOnItemClickListener(this);
                getActionBar().setHomeButtonEnabled(true);
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        switch(arg2){
        case 1:
            Intent myIntent = new Intent(this,TestClass.class);
            startActivity(myIntent);
            break;

        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon in action bar clicked; go home
               toggle();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

}

正如你所看到的,这个实现要求我填充我使用它的每个活动的侧边菜单。 (在此示例中,当用户从侧面菜单中选择项目1时,我启动一个名为TestClass的新活动,我必须填充listview并再次实现onitemlistener。)

我想要一种方法将整个listView代码(使用onitemclicklistener)移动到一个可以为所有活动(详细视图)调用的单独文件。我试图将代码移动到另一个类但是eclipse抛出一个null点异常错误。如果有人能指导我如何使用这个库(我没有找到非常有用的样本),我将非常感激。在此先感谢:)

2 个答案:

答案 0 :(得分:2)

如果您想避免自己编码的喧嚣,我建议您使用scringo。它是一种插件,您可以添加到您的应用程序,并具有像谷歌+ / FB / Youtube的幻灯片菜单(您可以选择菜单是在右侧还是左侧)。 它还具有您可以选择使用的内置功能(如聊天,邀请朋友等...),当然还可以将自己的命令添加到菜单中。

答案 1 :(得分:0)

有一种简单的方法可以整合整个事情,就是使用BaseActivity类,其中包含所有常见内容,例如幻灯片菜单设置相关代码。现在,所有需要滑动菜单功能的活动都可以扩展BaseActivity而不是SlidingActivity

这样的事情:

public class BaseActivity extends SlidingActivity implements OnItemClickListener{

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //content view is set by the activity which extends BaseActivity
        setBehindContentView(R.layout.list);
        getSlidingMenu().setBehindOffsetRes(R.dimen.actionbar_home_width);
        //Button btn = (Button) findViewById(R.id.button);

        //ListClass l=new ListClass(getApplicationContext());

        ListView lv=(ListView) findViewById(R.id.lvname);
        String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
                  "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                  "Linux", "OS/2" };
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                  android.R.layout.simple_list_item_1, android.R.id.text1, values);

                // Assign adapter to ListView
        lv.setAdapter(adapter); 
        lv.setOnItemClickListener(new OnItemClickListener() {

            /*
             * (non-Javadoc)
             * 
             * @see
             * android.widget.AdapterView.OnItemClickListener#onItemClick
             * (android.widget.AdapterView, android.view.View, int, long)
             */
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                switch(arg2){
                    case 1:
                        Intent myIntent = new Intent(this,TestClass.class);
                        startActivity(myIntent);
                        break;
                }
            }
        });
        getActionBar().setHomeButtonEnabled(true);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon in action bar clicked; go home
               toggle();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

}

您的示例活动看起来像这样:

public class ExampleActivity2 extends BaseActivity{

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btn = (Button) findViewById(R.id.button);
    }
}

永远记住要打电话给超级,否则你会得到运行时异常