package com.roboo.like.google.fragments; import java.io.DataOutputStream; import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import android.annotation.SuppressLint; import android.os.Bundle; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.EditText; import android.widget.ImageButton; import android.widget.AdapterView.OnItemClickListener; import com.roboo.like.google.R; import com.roboo.like.google.WeatherActivity; import com.roboo.like.google.adapters.ProvCityAdapter; import com.roboo.like.google.async.CityAsyncTaskLoader; import com.roboo.like.google.models.CityItem; import com.roboo.like.google.views.StickyListHeadersListView; @SuppressLint("NewApi") public class CityFragment extends BaseWithProgressFragment implements LoaderCallbacks<LinkedList<LinkedList<CityItem>>> { private static final String SUZHOU_WEATHER_URL = "http://m.weathercn.com/index.do?cid=01011706&pid=010117"; private StickyListHeadersListView mListView; private LinkedList<Integer> mSectionIndex = new LinkedList<Integer>(); private LinkedList<CityItem> mData; private ProvCityAdapter mAdapter; private View mHeaderView; public static CityFragment newInstance() { CityFragment fragment = new CityFragment(); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = null; if (savedInstanceState == null) { view = inflater.inflate(R.layout.fragment_city, null);// TODO mListView = (StickyListHeadersListView) view.findViewById(R.id.slhlv_list); } mHeaderView = createHeaderView(); // mListView.addHeaderView(mHeaderView); return view; } private View createHeaderView() { mHeaderView = LayoutInflater.from(getActivity()).inflate(R.layout.listview_city_header_view, null);// TODO ListView的HeaderView布局文件 final EditText editText = (EditText) mHeaderView.findViewById(R.id.et_text); ImageButton ibtnSearch = (ImageButton) mHeaderView.findViewById(R.id.ibtn_search); return mHeaderView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (null == mData) { getActivity().getSupportLoaderManager().restartLoader(0, getArguments(), this); } setListener(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.activity_weather, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_sz: // WebViewActivity.actionWebView(getActivity(), url, "苏州"); CityItem cityItem = new CityItem(); cityItem.cName = "苏州"; cityItem.cUrl = SUZHOU_WEATHER_URL; WeatherActivity.actionWeather(getActivity(), cityItem); break; } return super.onOptionsItemSelected(item); } public void setListener() { mListView.setOnItemClickListener(getOnItemClickListener()); } private OnItemClickListener getOnItemClickListener() { return new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { CityItem item = (CityItem) mAdapter.getItem(position); WeatherActivity.actionWeather(getActivity(), item); } }; } @Override public Loader<LinkedList<LinkedList<CityItem>>> onCreateLoader(int id, Bundle args) { return new CityAsyncTaskLoader(getActivity()); } @Override public void onLoadFinished(Loader<LinkedList<LinkedList<CityItem>>> loader, LinkedList<LinkedList<CityItem>> data) { mProgressBar.setVisibility(View.GONE); if (data != null) { mData = handleDataWithSectionIndex(data); mAdapter = new ProvCityAdapter(getActivity(), mData, mSectionIndex); mAdapter.setSectionIndex(mSectionIndex); mListView.setAdapter(mAdapter); } } private LinkedList<CityItem> handleDataWithSectionIndex(LinkedList<LinkedList<CityItem>> data) { LinkedList<CityItem> items = new LinkedList<CityItem>(); for (LinkedList<CityItem> tmp : data) { for (CityItem item : tmp) { if (null != item) { items.add(item); } } } Map<String, Integer> mHeaderIdMap = new HashMap<String, Integer>(); int mHeaderId = 1; LinkedList<CityItem> hasHeaderIdList = new LinkedList<CityItem>(); for (int i = 0; i < items.size(); i++) { CityItem item = items.get(i); String pName = item.pName; if (!mHeaderIdMap.containsKey(pName)) { item.headerId = mHeaderId; mHeaderIdMap.put(pName, mHeaderId); mHeaderId++; mSectionIndex.add(i); } else { item.headerId = mHeaderIdMap.get(pName); } hasHeaderIdList.add(item); } return hasHeaderIdList; } @Override public void onLoaderReset(Loader<LinkedList<LinkedList<CityItem>>> loader) { } /*** * 执行Root 命令 * * @param command * 要执行的命令[chmod 777 /data/misc/wifi/wpa_supplicant.conf] * @return true 命令成功执行 或者 false 命令执行失败 */ public static boolean runRootCommand(String command) { Process process = null; DataOutputStream os = null; try { process = Runtime.getRuntime().exec("su"); os = new DataOutputStream(process.getOutputStream()); os.writeBytes(command + "\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); } catch (Exception e) { return false; } finally { try { if (os != null) { os.close(); } process.destroy(); } catch (Exception e) {} } return true; } }