Android 如何在菜单滑块中添加项目
我有一个customviewadapter,它在我的主要活动中被调用来构建菜单滑块 我的问题是:我如何日常地向我的对象“dataList”添加项目 如果我从CustomViewAdapter进行此操作,当我完成从google获取位置的过程时:Android 如何在菜单滑块中添加项目,android,menu,Android,Menu,我有一个customviewadapter,它在我的主要活动中被调用来构建菜单滑块 我的问题是:我如何日常地向我的对象“dataList”添加项目 如果我从CustomViewAdapter进行此操作,当我完成从google获取位置的过程时: MainActivity prueba2 = new MainActivity(); prueba2.onCreate(null); 它向我抛出一个空指针异常 如果我这样做: MainActivity prueba2 = new
MainActivity prueba2 = new MainActivity();
prueba2.onCreate(null);
它向我抛出一个空指针异常
如果我这样做:
MainActivity prueba2 = new MainActivity();
prueba2.onPrepareOptionsMenu(null);
当我想添加一些类似于此部分的项目时,它会抛出一个错误:
for(int i=0;i<s1.size();i++){
dataList.add(new DrawerItem("Sitios2", R.drawable.ic_action_good));
for(int i=0;i arg0){
//TODO自动生成的方法存根
}
});
}else if(dItem.getTitle()!=null){
抽屉架.头部布局.设置可见性(LinearLayout.VISIBLE);
抽屉文件夹.itemLayout.setVisibility(LinearLayout.INVISIBLE);
抽屉架.喷丝头布局.设置可见性(LinearLayout.不可见);
drawerHolder.title.setText(dItem.getTitle());
Log.d(“Getview”、“Passed4”);
}否则{
抽屉架.头部布局.设置可见性(LinearLayout.不可见);
抽屉架.喷丝头布局.设置可见性(LinearLayout.不可见);
抽屉文件夹.itemLayout.setVisibility(LinearLayout.VISIBLE);
drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(
getImgResID());
drawerHolder.ItemName.setText(dItem.getItemName());
Log.d(“Getview”、“Passed5”);
}
返回视图;
}
/**从url下载json数据的方法*/
私有字符串下载URL(字符串strUrl)引发IOException{
字符串数据=”;
InputStream iStream=null;
HttpURLConnection-urlConnection=null;
试一试{
URL=新URL(strUrl);
//创建http连接以与url通信
urlConnection=(HttpURLConnection)url.openConnection();
//连接到url
urlConnection.connect();
//从url读取数据
iStream=urlConnection.getInputStream();
BufferedReader br=新的BufferedReader(新的InputStreamReader(iStream));
StringBuffer sb=新的StringBuffer();
字符串行=”;
而((line=br.readLine())!=null){
某人附加(行);
}
data=sb.toString();
br.close();
}捕获(例外e){
Log.d(“下载url时出现异常”,例如toString());
}最后{
iStream.close();
urlConnection.disconnect();
}
返回数据;
}
/**一个类,下载谷歌的地方*/
私有类PlacesTask扩展异步任务{
字符串数据=null;
//由此对象的execute()方法调用
@凌驾
受保护的字符串doInBackground(字符串…url){
试一试{
数据=下载url(url[0]);
}捕获(例外e){
Log.d(“后台任务”,例如toString());
}
返回数据;
}
//在完全执行doInBackground()方法后执行
@凌驾
受保护的void onPostExecute(字符串结果){
ParserTask ParserTask=新的ParserTask();
//开始解析JSON格式的GooglePlaces
//调用ParseTask类的“doInBackground()”方法
执行(结果);
}
}
/**以JSON格式解析GooglePlaces的类*/
私有类ParserTask扩展了AsyncTask{
JSONObject jObject;
//由此对象的execute()方法调用
@凌驾
受保护列表doInBackground(字符串…jsonData){
列表位置=空;
PlaceJSONParser PlaceJSONParser=新的PlaceJSONParser();
试一试{
jObject=新的JSONObject(jsonData[0]);
/**将解析后的数据作为列表构造获取*/
places=placeJsonParser.parse(jObject);
}捕获(例外e){
Log.d(“异常”,例如toString());
}
返回地点;
}
//在完全执行doInBackground()方法后执行
@凌驾
受保护的void onPostExecute(列表){
//清除所有现有标记
//mMapView.clear();
//通知(Results.toString());
/*mMapView.addMarker(新的MarkerOptions()
.位置(新车床(车床3,Lng3))
.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker1))
.头衔(卢格)
.snippet(Desc));
*/
//sendPlaces obj=新的sendPlaces();
//对象集合列表(列表);
setPlaceTag.List=List;
MainActivity PrueB2=新的MainActivity();
prueb2.onCreate(null);
//o=假;
//意向重定向=新意向(上下文,MainActivity.class);
//上下文。起始触觉(重定向);
//((菜单)映射)。清除();
对于(int i=0;我建议将您的代码缩减到回答问题所需的最小数量,这里有很多代码需要调试。我用以下方法解决它:adapter.clear();dataList.add(new-DrawerItem(name));mDrawerList.setAdapter(adapter);非常感谢!
public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> {
Context context;
List<DrawerItem> drawerItemList;
int layoutResID;
public static String type;
public CustomDrawerAdapter(Context context, int layoutResourceID,
List<DrawerItem> listItems) {
super(context, layoutResourceID, listItems);
this.context = context;
this.drawerItemList = listItems;
this.layoutResID = layoutResourceID;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
DrawerItemHolder drawerHolder;
View view = convertView;
if (view == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
drawerHolder = new DrawerItemHolder();
view = inflater.inflate(layoutResID, parent, false);
drawerHolder.ItemName = (TextView) view
.findViewById(R.id.drawer_itemName);
drawerHolder.icon = (ImageView) view.findViewById(R.id.drawer_icon);
drawerHolder.spinner = (Spinner) view
.findViewById(R.id.drawerSpinner);
drawerHolder.title = (TextView) view.findViewById(R.id.drawerTitle);
drawerHolder.headerLayout = (LinearLayout) view
.findViewById(R.id.headerLayout);
drawerHolder.itemLayout = (LinearLayout) view
.findViewById(R.id.itemLayout);
drawerHolder.spinnerLayout = (LinearLayout) view
.findViewById(R.id.spinnerLayout);
view.setTag(drawerHolder);
} else {
drawerHolder = (DrawerItemHolder) view.getTag();
}
DrawerItem dItem = (DrawerItem) this.drawerItemList.get(position);
if (dItem.isSpinner()) {
drawerHolder.headerLayout.setVisibility(LinearLayout.INVISIBLE);
drawerHolder.itemLayout.setVisibility(LinearLayout.INVISIBLE);
drawerHolder.spinnerLayout.setVisibility(LinearLayout.VISIBLE);
List<SpinnerItem> userList = new ArrayList<SpinnerItem>();
userList.add(new SpinnerItem(R.drawable.user1, "Airport"));
userList.add(new SpinnerItem(R.drawable.user1, "ATM"));
userList.add(new SpinnerItem(R.drawable.user1, "Bank"));
userList.add(new SpinnerItem(R.drawable.user1, "Bus Station"));
userList.add(new SpinnerItem(R.drawable.user1, "church"));
userList.add(new SpinnerItem(R.drawable.user1, "doctor"));
userList.add(new SpinnerItem(R.drawable.user1, "Airport"));
userList.add(new SpinnerItem(R.drawable.user1, "hospital"));
userList.add(new SpinnerItem(R.drawable.user1, "mosque"));
userList.add(new SpinnerItem(R.drawable.user1, "movie Theate"));
userList.add(new SpinnerItem(R.drawable.user1, "hindu Temple"));
userList.add(new SpinnerItem(R.drawable.user1, "restaurant"));
CustomSpinnerAdapter adapter = new CustomSpinnerAdapter(context,
R.layout.custom_spinner_item, userList);
final Double Lat2 = 25.751188242782035;
final Double Lng2 = -100.3097140789032;
drawerHolder.spinner.setAdapter(adapter);
drawerHolder.spinner
.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0,
View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
if(arg0.getSelectedItemPosition()==0){
type = "airport";
// setPlaceTag puto = new setPlaceTag();
setPlaceTag.setChangedStat(true);
setPlaceTag.setTag(type);
// MainActivity prueba = new MainActivity();
// prueba.onPrepareOptionsMenu(null);
//set atm string
StringBuilder sb = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
sb.append("location="+Lat2+","+Lng2);
sb.append("&radius=5000");
sb.append("&types="+type);
sb.append("&sensor=true");
sb.append("&key=ba");
// Creating a new non-ui thread task to download Google place json data
PlacesTask placesTask = new PlacesTask();
// Invokes the "doInBackground()" method of the class PlaceTask
placesTask.execute(sb.toString());
}
if(arg0.getSelectedItemPosition()==1){
String type = "atm";
setPlaceTag.tag = type;
// MainActivity prueba = new MainActivity();
// prueba.onPrepareOptionsMenu(null);
//set atm string
StringBuilder sb = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
sb.append("location="+Lat2+","+Lng2);
sb.append("&radius=5000");
sb.append("&types="+type);
sb.append("&sensor=true");
sb.append("&key=ba");
// Creating a new non-ui thread task to download Google place json data
PlacesTask placesTask = new PlacesTask();
// Invokes the "doInBackground()" method of the class PlaceTask
placesTask.execute(sb.toString());
// Toast.makeText(context, "User Changed", Toast.LENGTH_SHORT).show();
}
if(arg0.getSelectedItemPosition()==2){
Toast.makeText(context, "User Changed", Toast.LENGTH_SHORT).show(); }
if(arg0.getSelectedItemPosition()==3){
Toast.makeText(context, "User Changed", Toast.LENGTH_SHORT).show(); }
if(arg0.getSelectedItemPosition()==4){
Toast.makeText(context, "User Changed", Toast.LENGTH_SHORT).show(); }
if(arg0.getSelectedItemPosition()==5){
Toast.makeText(context, "User Changed", Toast.LENGTH_SHORT).show(); }
if(arg0.getSelectedItemPosition()==6){
Toast.makeText(context, "User Changed", Toast.LENGTH_SHORT).show(); }
if(arg0.getSelectedItemPosition()==7){
Toast.makeText(context, "User Changed", Toast.LENGTH_SHORT).show(); }
if(arg0.getSelectedItemPosition()==8){
Toast.makeText(context, "User Changed", Toast.LENGTH_SHORT).show(); }
if(arg0.getSelectedItemPosition()==9){
Toast.makeText(context, "User Changed", Toast.LENGTH_SHORT).show(); }
if(arg0.getSelectedItemPosition()==10){
Toast.makeText(context, "User Changed", Toast.LENGTH_SHORT).show(); }
if(arg0.getSelectedItemPosition()==11){
Toast.makeText(context, "User Changed", Toast.LENGTH_SHORT).show(); }
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
} else if (dItem.getTitle() != null) {
drawerHolder.headerLayout.setVisibility(LinearLayout.VISIBLE);
drawerHolder.itemLayout.setVisibility(LinearLayout.INVISIBLE);
drawerHolder.spinnerLayout.setVisibility(LinearLayout.INVISIBLE);
drawerHolder.title.setText(dItem.getTitle());
Log.d("Getview","Passed4");
} else {
drawerHolder.headerLayout.setVisibility(LinearLayout.INVISIBLE);
drawerHolder.spinnerLayout.setVisibility(LinearLayout.INVISIBLE);
drawerHolder.itemLayout.setVisibility(LinearLayout.VISIBLE);
drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(
dItem.getImgResID()));
drawerHolder.ItemName.setText(dItem.getItemName());
Log.d("Getview","Passed5");
}
return view;
}
/** A method to download json data from url */
private String downloadUrl(String strUrl) throws IOException{
String data = "";
InputStream iStream = null;
HttpURLConnection urlConnection = null;
try{
URL url = new URL(strUrl);
// Creating an http connection to communicate with url
urlConnection = (HttpURLConnection) url.openConnection();
// Connecting to url
urlConnection.connect();
// Reading data from url
iStream = urlConnection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(iStream));
StringBuffer sb = new StringBuffer();
String line = "";
while( ( line = br.readLine()) != null){
sb.append(line);
}
data = sb.toString();
br.close();
}catch(Exception e){
Log.d("Exception while downloading url", e.toString());
}finally{
iStream.close();
urlConnection.disconnect();
}
return data;
}
/** A class, to download Google Places */
private class PlacesTask extends AsyncTask<String, Integer, String>{
String data = null;
// Invoked by execute() method of this object
@Override
protected String doInBackground(String... url) {
try{
data = downloadUrl(url[0]);
}catch(Exception e){
Log.d("Background Task",e.toString());
}
return data;
}
// Executed after the complete execution of doInBackground() method
@Override
protected void onPostExecute(String result){
ParserTask parserTask = new ParserTask();
// Start parsing the Google places in JSON format
// Invokes the "doInBackground()" method of the class ParseTask
parserTask.execute(result);
}
}
/** A class to parse the Google Places in JSON format */
private class ParserTask extends AsyncTask<String, Integer, List<HashMap<String,String>>>{
JSONObject jObject;
// Invoked by execute() method of this object
@Override
protected List<HashMap<String,String>> doInBackground(String... jsonData) {
List<HashMap<String, String>> places = null;
PlaceJSONParser placeJsonParser = new PlaceJSONParser();
try{
jObject = new JSONObject(jsonData[0]);
/** Getting the parsed data as a List construct */
places = placeJsonParser.parse(jObject);
}catch(Exception e){
Log.d("Exception",e.toString());
}
return places;
}
// Executed after the complete execution of doInBackground() method
@Override
protected void onPostExecute(List<HashMap<String,String>> list){
// Clears all the existing markers
// mMapView.clear();
// notificacion(Results.toString());
/* mMapView.addMarker(new MarkerOptions()
.position(new LatLng(Lat3,Lng3))
.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker1))
.title(Lugar)
.snippet(Desc));
*/
// sendPlaces obj = new sendPlaces();
// obj.setList(list);
setPlaceTag.List = list;
MainActivity prueba2 = new MainActivity();
prueba2.onCreate(null);
//o = false;
// Intent redirect = new Intent(context,MainActivity.class);
// context.startActivity(redirect);
//((Menu) map).clear();
for(int i=0;i<list.size();i++){
// Creating a marker
// MarkerOptions markerOptions = new MarkerOptions();
// Getting a place from the places list
HashMap<String, String> hmPlace = list.get(i);
// Getting latitude of the place
double lat = Double.parseDouble(hmPlace.get("lat"));
// Getting longitude of the place
double lng = Double.parseDouble(hmPlace.get("lng"));
// Getting name
String name = hmPlace.get("place_name");
// Getting vicinity
String vicinity = hmPlace.get("vicinity");
// LatLng latLng = new LatLng(lat, lng);
// Setting the position for the marker
// markerOptions.position(latLng);
// Setting the title for the marker.
//This will be displayed on taping the marker
// markerOptions.title(name + " : " + vicinity);
// Placing a marker on the touched position
// mMapView.addMarker(markerOptions);
}
}
}
private static class DrawerItemHolder {
TextView ItemName, title;
ImageView icon;
LinearLayout headerLayout, itemLayout, spinnerLayout;
Spinner spinner;
}
}
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
CustomDrawerAdapter adapter;
List<DrawerItem> dataList;
public List<HashMap<String, String>> list;
private boolean isChangedStat = false;
private static final int MENUITEM = Menu.FIRST;
private String wei;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initializing
dataList = new ArrayList<DrawerItem>();
mTitle = mDrawerTitle = getTitle();
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
GravityCompat.START);
// Add Drawer Item to dataList
dataList.add(new DrawerItem(true)); // adding a spinner to the list
// list =
//for(int i=0;i<list.size();i++){ //}
dataList.add(new DrawerItem("Closed sites")); // adding a header to the list
dataList.add(new DrawerItem("Sitios", R.drawable.ic_action_good));
adapter = new CustomDrawerAdapter(this, R.layout.custom_drawer_item,
dataList);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, R.string.drawer_open,
R.string.drawer_close) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to
// onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu(); // creates call to
// onPrepareOptionsMenu()
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
if (dataList.get(0).isSpinner()
& dataList.get(1).getTitle() != null) {
SelectItem(2);
} else if (dataList.get(0).getTitle() != null) {
SelectItem(1);
} else {
SelectItem(0);
}
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//Toast.makeText(getApplicationContext(), "wei estas en resume", Toast.LENGTH_SHORT).show();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
// Toast.makeText(getApplicationContext(), "vato estas en onpause", Toast.LENGTH_SHORT).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
//menu.clear();
/* String s = setPlaceTag.tag;
Boolean check = setPlaceTag.isChangedStat;
if(check.equals(true)){
List<HashMap<String, String>> s1 = setPlaceTag.List;
if(!s1.equals(null)){
for(int i=0;i<s1.size();i++){
dataList.add(new DrawerItem("Sitios2", R.drawable.ic_action_good));
getMenuInflater().inflate(R.menu.main, menu);
}
}
} */
return super.onPrepareOptionsMenu(menu);
}
public void SelectItem(int possition) {
Fragment fragment = null;
Bundle args = new Bundle();
switch (possition) {
case 2:
fragment = new FragmentThree();
args.putString(FragmentThree.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentThree.IMAGE_RESOURCE_ID, dataList
.get(possition).getImgResID());
break;
case 3:
fragment = new FragmentOne();
args.putString(FragmentOne.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentOne.IMAGE_RESOURCE_ID, dataList.get(possition)
.getImgResID());
break;
case 4:
fragment = new FragmentTwo();
args.putString(FragmentTwo.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentTwo.IMAGE_RESOURCE_ID, dataList.get(possition)
.getImgResID());
break;
case 5:
fragment = new FragmentThree();
args.putString(FragmentThree.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentThree.IMAGE_RESOURCE_ID, dataList
.get(possition).getImgResID());
break;
case 7:
fragment = new FragmentTwo();
args.putString(FragmentTwo.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentTwo.IMAGE_RESOURCE_ID, dataList.get(possition)
.getImgResID());
break;
case 8:
fragment = new FragmentThree();
args.putString(FragmentThree.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentThree.IMAGE_RESOURCE_ID, dataList
.get(possition).getImgResID());
break;
case 9:
fragment = new FragmentOne();
args.putString(FragmentOne.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentOne.IMAGE_RESOURCE_ID, dataList.get(possition)
.getImgResID());
break;
case 10:
fragment = new FragmentTwo();
args.putString(FragmentTwo.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentTwo.IMAGE_RESOURCE_ID, dataList.get(possition)
.getImgResID());
break;
case 11:
fragment = new FragmentThree();
args.putString(FragmentThree.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentThree.IMAGE_RESOURCE_ID, dataList
.get(possition).getImgResID());
break;
case 12:
fragment = new FragmentOne();
args.putString(FragmentOne.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentOne.IMAGE_RESOURCE_ID, dataList.get(possition)
.getImgResID());
break;
case 14:
fragment = new FragmentThree();
args.putString(FragmentThree.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentThree.IMAGE_RESOURCE_ID, dataList.get(possition)
.getImgResID());
break;
case 15:
fragment = new FragmentOne();
args.putString(FragmentOne.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentOne.IMAGE_RESOURCE_ID, dataList.get(possition)
.getImgResID());
break;
case 16:
fragment = new FragmentTwo();
args.putString(FragmentTwo.ITEM_NAME, dataList.get(possition)
.getItemName());
args.putInt(FragmentTwo.IMAGE_RESOURCE_ID, dataList.get(possition)
.getImgResID());
break;
default:
break;
}
fragment.setArguments(args);
FragmentManager frgManager = getFragmentManager();
frgManager.beginTransaction().replace(R.id.content_frame, fragment) .commit();
mDrawerList.setItemChecked(possition, true);
setTitle(dataList.get(possition).getItemName());
mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(mTitle);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggles
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// The action bar home/up action should open or close the drawer.
// ActionBarDrawerToggle will take care of this.
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
Toast.makeText(getApplicationContext(), "estas en main activity modificando spinner", Toast.LENGTH_SHORT).show();
return false;
}
private class DrawerItemClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if (dataList.get(position).getTitle() == null) {
SelectItem(position);
}
Toast.makeText(getApplicationContext(), "diste click a sitios", Toast.LENGTH_SHORT).show();
}
}
}