【发布时间】:2017-10-26 03:10:43
【问题描述】:
我已经阅读了很多关于实现导航抽屉以在片段之间进行更改的问题和教程。对于这个问题,不需要这些实现,因为我希望从一个活动更改为下一个活动。
我已经实现了一个自定义侧边栏适配器扩展 ArrayAdapter<String>。这允许实现我自己的样式到我的导航抽屉。见下面第一个代码sn-p。
public class SidebarAdaptor extends ArrayAdapter<String> {
Context context;
int layoutResourceId;
String data[] = null;
public SidebarAdaptor(Context context, int layoutResourceId, String[] data)
{
// Initiate the ArrayAdapter
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ControlHolder holder;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ControlHolder();
TextView control = (TextView)row.findViewById(R.id.textItem);
holder.control = control;
row.setTag(holder);
}
else
{
holder = (ControlHolder)row.getTag();
}
String text = data[position];
holder.control.setText(text);
return row;
}
static class ControlHolder
{
TextView control;
}
}
然后在我的MainActivity 类的onCreate 函数中设置此适配器。见下文。
private void customiseSidebar() {
SidebarAdaptor sidebarAdaptor = new SidebarAdaptor(
this,
R.layout.side_bar_custom_row,
new String[]{"Login", "Offline Access", "Register", "Forgotten Password"}
);
ListView listView1 = (ListView) findViewById(R.id.navList);
listView1.setAdapter(sidebarAdaptor);
listView1.setOnItemClickListener(new DrawerItemClickListener());
}
DrawerItemClickListener 类会保存用户按下导航抽屉中的任何选项后要切换到的活动。看下面的最终代码sn-p。
package ap.classes;
import android.content.Intent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import ap.ForgottenPassword;
import apMainActivity;
import ap.OfflineAccess;
import ap.RegisterAccount;
public class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
/** Swaps fragments in the main content view */
private void selectItem(int position) {
switch(position)
{
case 0:
Intent intent = new Intent(MainActivity.this, OfflineAccess.class);
startActivity(intent);
break;
case 1:
Intent intent = new Intent(MainActivity.this, RegisterAccount.class);
startActivity(intent);
break;
case 2:
Intent intent = new Intent(MainActivity.this, ForgottenPassword.class);
startActivity(intent);
break;
}
}
现在我似乎遇到了三个相当重要的问题:
- 第一个是以下错误消息:
MainActivity is not an enclossing class - 第二个声明它;
Cannont resolve method startActivity in android.content.Intent - 最后一个问题是,只要我单击 NavigationDrawer 中的任何内容,抽屉就会关闭而没有注册任何按键。
谢谢 Stackoverflow。
【问题讨论】:
-
第三个问题可以通过改变 ListView 控件的 Z-Ordering 来解决。 stackoverflow.com/questions/21941570/…
标签: java android android-activity