Android: проблема со всплывающим окном

Я использовал следующий код для создания круговой диаграммы во всплывающем окне в фрагменте.

mChartView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer); popupWindow = new PopupWindow(mChartView, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, false); popupWindow.setOutsideTouchable(true); popupWindow.showAsDropDown(mChartView, 50, 50); popupWindow.setTouchInterceptor(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { popupWindow.dismiss(); } return false; } });

Это мой полный код.

public class MainActivity extends SherlockFragmentActivity {
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
private Boolean is3g, isWifi;
private int networkType;
private TelephonyManager *************;
static Integer[] pics = { R.drawable.route, R.drawable.two, R.drawable.three, R.drawable.four };
static ImageAdapter imgAdp;
private static PopupWindow popupWindow = null;
@Override
public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig);
}
@Override
public void onBackPressed() { if(popupWindow != null) { popupWindow.dismiss(); } else { super.onBackPressed(); }
}
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return true; } return super.onKeyDown(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) { **********************().inflate(R.menu.banner, menu); return true;
}
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imgAdp = new ImageAdapter(MainActivity.this); mSectionsPagerAdapter = new SectionsPagerAdapter( getSupportFragmentManager()); mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mSectionsPagerAdapter); ActionBar actionBar = getActionBar(); actionBar.setDisplayShowTitleEnabled(true); // network connection manager ConnectivityManager manager = (ConnectivityManager) getSystemService(LoginActivity.CONNECTIVITY_SERVICE); is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) .isConnectedOrConnecting(); isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) .isConnectedOrConnecting(); ************* = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); networkType = *************.getNetworkType();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_accept: Intent sales = new Intent(getApplicationContext(), SalesRouteFragment.class); Intent showContent = new Intent(getApplicationContext(), DownloadUploadPagerActivity.class); Bundle bundle = new Bundle(); bundle.putString("name", "MainActivity"); if (is3g || isWifi) { Toast.makeText(MainActivity.this, "WIFI/3G is availabe ", Toast.LENGTH_LONG).show(); showContent.putExtras(bundle); startActivity(showContent); finish(); return true; } else if (networkType == TelephonyManager.NETWORK_TYPE_GPRS) { Toast.makeText(MainActivity.this, "GPRS is availabe ", Toast.LENGTH_LONG).show(); showContent.putExtras(bundle); startActivity(showContent); finish(); return true; } else { Toast.makeText(MainActivity.this, "There is no internet connectivity", Toast.LENGTH_LONG) .show(); sales.putExtras(bundle); startActivity(sales); finish(); return true; } case R.id.ac_exit: AlertDialog.Builder exitCon = new AlertDialog.Builder( MainActivity.this); exitCon.setMessage("Do you want to Exit? "); exitCon.setCancelable(false); exitCon.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); try { removePrefrence(); Intent exit = new Intent(MainActivity.this, LoginActivity.class); Bundle bdle = new Bundle(); bdle.putString("name", "LoginActivity"); exit.putExtras(bdle); startActivity(exit); finish(); } catch (Exception e) { e.printStackTrace(); } } }); exitCon.setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); exitCon.setTitle("Exit..."); exitCon.show(); return true; default: return super.onOptionsItemSelected(item); }
}
// Exit
public void removePrefrence() { SharedPreferences myLogPrefs = MainActivity.this.getSharedPreferences( "myLogedPrefs", MODE_PRIVATE); SharedPreferences myRoutes = MainActivity.this.getSharedPreferences( "myRoute", MODE_PRIVATE); Date date = new Date(); DateFormat dateOnlyFormatter = new SimpleDateFormat("yyyy-MM-dd"); String strDateOnly = dateOnlyFormatter.format(date); String loggedDate = myLogPrefs.getString("LoggedDate", ""); if (loggedDate.equals(strDateOnly)) { } else { SharedPreferences.Editor prefsEditor = myLogPrefs.edit(); myLogPrefs.getAll(); prefsEditor.remove("myLogedPrefs"); prefsEditor.clear(); prefsEditor.commit(); SharedPreferences.Editor routePrefence = myRoutes.edit(); myRoutes.getAll(); routePrefence.remove("myRoute"); routePrefence.clear(); routePrefence.commit(); }
}
public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public CharSequence getPageTitle(int position) { Locale l = Locale.getDefault(); switch (position) { case 0: return getString(R.string.title_section1).toUpperCase(l); case 1: return getString(R.string.title_section2).toUpperCase(l); } return null; } @Override public Fragment getItem(int position) { switch (position) { case 0: Fragment fragment = new DummySectionFragment(); Bundle args = new Bundle(); args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); fragment.setArguments(args); return fragment; case 1: Fragment fment1 = new DummySectionFragment(); Bundle args1 = new Bundle(); args1.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); fment1.setArguments(args1); return fment1; case 2: case 3: default: Fragment fment = new DummySectionFragment(); Bundle ars = new Bundle(); ars.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); fment.setArguments(ars); return fment; } } @Override public int getCount() { return 2; }
}
public static class LaunchpadSectionFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = null; Intent intent = new Intent(getActivity(), SalesRouteFragment.class); startActivity(intent); return rootView; }
}
public static class DummySectionFragment extends Fragment { public static final String ARG_SECTION_NUMBER = "section_number"; private String strBusinessUnit, strExeCode; private Date date = new Date(); private DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); private String sysDate = dateFormatter.format(date); private ArrayList<xaperiodenddate> currentPerid_Yr = new ArrayList<xaperiodenddate>(); private int currentYear; private int currentPeriod; private TextView tvAsAt, tvTarget, tvAchieved, tvBalAchieve, tvBalDays, *************, tvOutlet, tvTargetVal; private Button btnpieChart; private ProgressBar progressBar; private ArrayList<wmtargetexecachievesummary> lstExeSummaryData; private DecimalFormat deciFormatter = new DecimalFormat("#.00"); private ****** target, bal_toAchieve, achieved, pertageAchieved, dayTargetVal; private String strStartDate, strEndDate; private int balDays = 1, outletCount = 0; private TreeMap<string, string=""> todayRouteMap = new TreeMap<string, string="">(); private String todayRouteCode; private HashMap<string, ******=""> chartDataMap = new HashMap<string, ******="">(); private ArrayList<string> lstBrandNames = new ArrayList<string>(); private ArrayList<******> lstAchievedVals = new ArrayList<******>(); private GraphicalView mChartView = null; private LinearLayout chart_container; private View rootView = null; public DummySectionFragment() { } @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //View rootView = null; if (getArguments().getInt(ARG_SECTION_NUMBER) == 1) { rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false); tvAsAt = (TextView) rootView.findViewById(R.id.tvAsAt); tvAchieved = (TextView) rootView.findViewById(R.id.tvAchieved); tvBalAchieve = (TextView) rootView.findViewById(R.id.tvBalAchieve); tvBalDays = (TextView) rootView.findViewById(R.id.tvBalDays); tvOutlet = (TextView) rootView.findViewById(R.id.tvOutlet); ************* = (TextView) rootView.findViewById(R.id.*************); tvTarget = (TextView) rootView.findViewById(R.id.tvTarget); tvTargetVal = (TextView) rootView.findViewById(R.id.tvTargetVal); btnpieChart = (Button) rootView.findViewById(R.id.btnpieChart); progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar); btnpieChart.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { SelectDBAdapter selectDBAdapter = SelectDBAdapter .getDBAdapterInstance(getActivity()); try { selectDBAdapter.openDataBase(); chartDataMap = selectDBAdapter .getPieChartData(strBusinessUnit, currentPeriod, currentYear); } catch (Exception e) { selectDBAdapter.close(); e.printStackTrace(); } finally { selectDBAdapter.close(); } System.out.println("chartDataMap === "+ chartDataMap); if (chartDataMap.size() > 0) { for (Map.Entry<string, ******=""> entry : chartDataMap.entrySet()) { lstBrandNames.add(entry.getKey()); lstAchievedVals.add(entry.getValue()); } ArrayList<******> distribution = calc_Percentage(lstAchievedVals); System.out.println("distribution === " + distribution); lstBrandNames = set_lables(lstBrandNames, distribution); CategorySeries distributionSeries = new CategorySeries( "Brands - Achievement Progress"); for (int i = 0; i < distribution.size(); i++) { distributionSeries.add(lstBrandNames.get(i), distribution.get(i)); } DefaultRenderer defaultRenderer = new DefaultRenderer(); defaultRenderer.setApplyBackgroundColor(true); defaultRenderer.setBackgroundColor(Color.WHITE); defaultRenderer.setLabelsTextSize(25); //defaultRenderer.setPanEnabled(true, false); for (int i = 0; i < distribution.size(); i++) { SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer(); Random rnd = new Random(); int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); seriesRenderer.setColor(color); seriesRenderer.setGradientEnabled(false); seriesRenderer.setDisplayChartValues(true); seriesRenderer.setShowLegendItem(false); defaultRenderer.addSeriesRenderer(seriesRenderer); } defaultRenderer.setLabelsColor(Color.BLACK); defaultRenderer.setChartTitle("Brands - Achievement Progress"); defaultRenderer.setChartTitleTextSize(30); defaultRenderer.setZoomButtonsVisible(true); defaultRenderer.setShowLabels(true); if (mChartView == null) { mChartView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer); } else { mChartView.repaint(); } //mChartView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer); //LayoutInflater layoutInflater = null; //View popupView = layoutInflater.inflate(R.layout.popup, null); //View popupView = inflater.inflate(R.layout.pie_chart, null); popupWindow = new PopupWindow(mChartView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, false); popupWindow.setOutsideTouchable(true); popupWindow.showAsDropDown(mChartView, 50, 50); popupWindow.setBackgroundDrawable(new BitmapDrawable()); popupWindow.setTouchInterceptor(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub if (event.getAction() == MotionEvent.ACTION_OUTSIDE && event.getAction()==KeyEvent.KEYCODE_BACK) { popupWindow.dismiss(); } return false; } }); //popupWindow.showAtLocation(mChartView, Gravity.CENTER, 10, 10); //popupWindow.update(); /*FragmentTransaction ft = getFragmentManager().beginTransaction(); //mChartView.setId(1000); ft.replace(, new DummySectionFragment(), "NewFragmentTag"); ft.addToBackStack(null); ft.commit();*/ //chart_container = new LinearLayout(getActivity()); //chart_container.setId(1); //LinearLayout chartContainer = (LinearLayout) rootView.findViewById( // R.id.chart_container); //rootView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer); //chart_container.removeAllViews(); //chart_container.addView(mChartView); /*ft.replace(rootView.getId(), new DummySectionFragment(), "NewFragmentTag"); //getActivity().setContentView(chart_container); ft.addToBackStack(null); ft.commit();*/ /*Intent intent = ChartFactory.getPieChartIntent( getActivity(), distributionSeries, defaultRenderer, "Dash Board");*/ //layout = new LinearLayout(getActivity()); //mChartView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer); /*Intent intent = ChartFactory.getPieChartIntent( getActivity(), distributionSeries, defaultRenderer, "Dash Board");*/ //getActivity().startActivity(intent); /*layout.removeAllViews(); //This remove previous graph layout.addView(mChartView); //This loads the graph again layout.bringToFront(); getActivity().setContentView(layout);*/ } } }); } else if (getArguments().getInt(ARG_SECTION_NUMBER) == 2) { rootView = inflater.inflate(R.layout.dashboard_vedio, container, false); VideoView videoView = (VideoView) rootView .findViewById(R.id.videoView1); MediaController mcontroller = new MediaController( rootView.getContext()); mcontroller.setAnchorView(mcontroller); String url = Environment.getExternalStorageDirectory() + "/XONT/BabyCheramy.mp4"; Uri video = Uri.parse(url); videoView.setVideoURI(video); videoView.setMediaController(mcontroller); } else { rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false); } return rootView; }
}
public static ArrayList<******> calc_Percentage(ArrayList<******> list) { ArrayList<******> lstPercentage = new ArrayList<******>(); ****** total = 0; ****** precentage; for (int i = 0; i < list.size(); i++) { total = total + list.get(i); } System.out.println(total); for (int j = 0; j < list.size(); j++) { precentage = (list.get(j) / total) * 100; lstPercentage.add(precentage); } return lstPercentage;
}
public static ArrayList<string> set_lables(ArrayList<string> lstBrandNames, ArrayList<******> distribution) { String G_lable; DecimalFormat df = new DecimalFormat("#.00"); ArrayList<string> lstLabels = new ArrayList<string>(); for (int i = 0; i < lstBrandNames.size(); i++) { G_lable = lstBrandNames.get(i) + " : " + df.format(distribution.get(i)) + "%"; lstLabels.add(G_lable); } return lstLabels;
}
public class ImageAdapter extends BaseAdapter { private Context ctx; int imageBackground; public ImageAdapter(Context c) { ctx = c; ********** ta = obtainStyledAttributes(R.styleable.Gallery1); imageBackground = ta.getResourceId( R.styleable.Gallery1_android_galleryItemBackground, 1); ta.recycle(); } @Override public int getCount() { return pics.length; } @Override public Object getItem(int arg0) { return arg0; } @Override public long getItemId(int arg0) { return arg0; } public View getView(int arg0, View arg1, ViewGroup arg2) { ImageView iv = new ImageView(ctx); iv.setImageResource(pics[arg0]); iv.setScaleType(ImageView.ScaleType.FIT_XY); iv.setLayoutParams(new Gallery.LayoutParams(150, 120)); iv.setBackgroundResource(imageBackground); return iv; }
}
</string></string></******></string></string></******></******></******></******></******></string,></******></******></string></string></string,></string,></string,></string,></wmtargetexecachievesummary></xaperiodenddate></xaperiodenddate>

}

Это мой новый код.

private static boolean isChart = false;
popupWindow = new PopupWindow(mChartView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, false); popupWindow.setOutsideTouchable(true); popupWindow.showAsDropDown(mChartView, 50, 50); isChart = true;
@Override
public void onBackPressed() { System.out.println("BACKED"); if(isChart) { popupWindow.dismiss(); } else { super.onBackPressed(); } //return;
}

Он показывает график. Но он не возвращается из окна круговой диаграммы, когда я нажимаю кнопку "Назад" в android. Как я могу решить эту проблему? Любые предложения приветствуются.

Заранее спасибо

2 ответа

Вы должны добавить это:

popupWindow.setBackgroundDrawable(new BitmapDrawable());

при создании всплывающего окна, в противном случае он не будет реагировать на какие-либо события касания из-за невозможности установки фона.


Ваша деятельность должна переопределить

@Override public void onBackPressed() {
}

В этом случае вы должны проверить, отображается ли всплывающее окно, если это так, вы должны его отклонить

define bool _isVisible = false;//in class level bool _isVisible = false;//in class level Set _isVisible = true;//on popup.show _isVisible = true;//on popup.show

внутри onbackpressed()

if(_isVisible) popup.dismiss();
@Override
public void onBackPressed() {
if(popupWindow != null) // dont check this if, put a bool value instead of this
{ popupWindow.dismiss();
} else { super.onBackPressed();
}
}

licensed under cc by-sa 3.0 with attribution.