我是一个新手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点异常错误。如果有人能指导我如何使用这个库(我没有找到非常有用的样本),我将非常感激。在此先感谢:)
答案 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);
}
}
永远记住要打电话给超级,否则你会得到运行时异常