3

我是一名新手 android 开发人员,他正在尝试构建一个使用飞入菜单的应用程序(类似于 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 的新活动,我必须在其中填充列表视图并再次实现 onitemlistener)。

我想要一种将整个 listView 代码(使用 onitemclicklistener)移动到可以为所有活动(详细视图)调用的单独文件的方法。我试图将代码移动到不同的类,但 eclipse 抛出空点异常错误. 如果有人可以指导我如何使用该库的示例,我将不胜感激(我没有发现这些示例很有用)。提前致谢 :)

4

2 回答 2

2

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

于 2013-03-16T07:35:37.180 回答
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);
    }
}

永远记得调用 super 否则你会得到运行时异常

于 2013-03-14T14:01:23.117 回答