【发布时间】:2020-11-12 10:47:13
【问题描述】:
我有一个框架布局。我在其中设置了扫描仪视图。
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical"
android:id="@+id/root"
android:padding="10dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.budiyev.android.codescanner.CodeScannerView
android:id="@+id/scanner_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:autoFocusButtonColor="@android:color/white"
app:autoFocusButtonVisible="true"
app:flashButtonColor="@android:color/white"
app:flashButtonVisible="true"
app:frameColor="@android:color/white"
app:frameCornersSize="50dp"
app:frameCornersRadius="0dp"
app:frameAspectRatioWidth="1"
app:frameAspectRatioHeight="1"
app:frameSize="0.75"
app:frameThickness="2dp"
app:maskColor="#77000000"/>
</FrameLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
现在我正在另一个片段上打开它,但我不想这样做。我想点击按钮打开它
@BindView(R.id.start_scan)
ImageButton startScan;
public void bindListners()
{
startScan.setOnClickListener(startScanning);
}
private final View.OnClickListener startScanning = v -> {
if(v.getId()==R.id.start_scan){
//here I want to call it
}
}
更新 1 MainActivity
我的MainActivity 中还有一些其他片段。以下是我的整个主要活动代码
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
//fragments
ScanFragment scanFragment = null;
NewFormFragment mNewFormFragment = null;
InstallationListFragment mInstallationListFragment = null;
ProgressFragment progressFragment = null;
boolean quitPress = false;
NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
Common.hideSoftKeyboard(MainActivity.this);
}
@Override
public void onDrawerStateChanged(int newState) {
super.onDrawerStateChanged(newState);
}
};
drawer.setDrawerListener(toggle);
toggle.syncState();
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
mNewFormFragment = new NewFormFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out, android.R.animator.fade_in, android.R.animator.fade_out)
.replace(R.id.fragment_container, mNewFormFragment, Constants.FRAGMENTS_NEW_FORM_TAG)
.commit();
fragmentManager.executePendingTransactions();
navigationView.setCheckedItem(R.id.new_form);
View headerView = navigationView.getHeaderView(0);
TextView t = (TextView) headerView.findViewById(R.id.user_name);
t.setText(Common.SharedPreferenceHelper.getSharedPreference(this, getString(R.string.user_name_key), ""));
Log.d("zaidi","auth = "+Common.getAuthKey(this));
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
}
FragmentManager manager = getFragmentManager();
if (manager.getBackStackEntryCount() == 0 && !quitPress) {
Toast.makeText(MainActivity.this, "Press again to quit", Toast.LENGTH_SHORT).show();
quitPress = true;
} else {
quitPress = false;
try {
super.onBackPressed();
} catch (Exception e) {
}
}
if (manager.getBackStackEntryCount() > 0) {
String backStack = manager.getBackStackEntryAt(manager.getBackStackEntryCount() - 1).getName();
setNavigationItem(getMenuIdByTag(backStack));
} else {
setNavigationItem(getMenuIdByTag(Constants.FRAGMENTS_NEW_FORM_TAG));
}
}
private void setNavigationItem(int id) {
try {
navigationView.getMenu().getItem(id).setChecked(true);
} catch (Exception e) {
e.printStackTrace();
}
}
private int getMenuIdByTag(String tag) {
switch (tag) {
case Constants.FRAGMENTS_NEW_FORM_TAG: {
return 0;
}
case Constants.FRAGMENT_INSTALLATIONS_TAG: {
return 1;
}
case Constants.FRAGMENT_INSTALLATION_PROGRESS_TAG: {
return 2;
}
case Constants.FRAGMENT_SETTINGS_TAG: {
return 3;
}
default: {
return -1;
}
}
}
@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 onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
Common.hideSoftKeyboard(MainActivity.this);
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
SettingsFragment myFragment = (SettingsFragment) getFragmentManager().findFragmentByTag(Constants.FRAGMENT_SETTINGS_TAG);
if (myFragment != null && myFragment.isVisible()) {
// add your code here
} else {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out, android.R.animator.fade_in, android.R.animator.fade_out)
.replace(R.id.fragment_container, new SettingsFragment(), Constants.FRAGMENT_SETTINGS_TAG)
.addToBackStack(Constants.FRAGMENT_SETTINGS_TAG).commit();
fragmentManager.executePendingTransactions();
setNavigationItem(getMenuIdByTag(Constants.FRAGMENT_SETTINGS_TAG));
}
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.new_form) {
NewFormFragment myFragment = (NewFormFragment) getFragmentManager().findFragmentByTag(Constants.FRAGMENTS_NEW_FORM_TAG);
if (myFragment != null && myFragment.isVisible() && this.getTitle() == "New Form") {
// add your code here
} else if (mNewFormFragment == null) {
mNewFormFragment = new NewFormFragment();
}
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out, android.R.animator.fade_in, android.R.animator.fade_out)
.replace(R.id.fragment_container, mNewFormFragment, Constants.FRAGMENTS_NEW_FORM_TAG)
.addToBackStack(Constants.FRAGMENTS_NEW_FORM_TAG).commit();
fragmentManager.executePendingTransactions();
} else if (id == R.id.action_settings) {
SettingsFragment myFragment = (SettingsFragment) getFragmentManager().findFragmentByTag(Constants.FRAGMENT_SETTINGS_TAG);
if (myFragment != null && myFragment.isVisible()) {
// add your code here
} else {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out, android.R.animator.fade_in, android.R.animator.fade_out)
.replace(R.id.fragment_container, new SettingsFragment(), Constants.FRAGMENT_SETTINGS_TAG)
.addToBackStack(Constants.FRAGMENT_SETTINGS_TAG).commit();
fragmentManager.executePendingTransactions();
}
} else if (id == R.id.installations) {
InstallationListFragment myFragment = (InstallationListFragment) getFragmentManager().findFragmentByTag(Constants.FRAGMENT_INSTALLATIONS_TAG);
if (myFragment != null && myFragment.isVisible()) {
// add your code here
} else {
if (this.mInstallationListFragment == null) {
this.mInstallationListFragment = new InstallationListFragment();
}
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out, android.R.animator.fade_in, android.R.animator.fade_out)
.replace(R.id.fragment_container, mInstallationListFragment, Constants.FRAGMENT_INSTALLATIONS_TAG)
.addToBackStack(Constants.FRAGMENT_INSTALLATIONS_TAG).commit();
fragmentManager.executePendingTransactions();
}
} else if (id == R.id.progress) {
ProgressFragment myFragment = (ProgressFragment) getFragmentManager().findFragmentByTag(Constants.FRAGMENT_INSTALLATION_PROGRESS_TAG);
if (myFragment != null && myFragment.isVisible()) {
// add your code here
} else {
if (this.progressFragment == null) {
this.progressFragment = new ProgressFragment();
}
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out, android.R.animator.fade_in, android.R.animator.fade_out)
.replace(R.id.fragment_container, progressFragment, Constants.FRAGMENT_INSTALLATION_PROGRESS_TAG)
.addToBackStack(Constants.FRAGMENT_INSTALLATION_PROGRESS_TAG).commit();
fragmentManager.executePendingTransactions();
}
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case Constants.MY_PERMISSIONS_LOCATION_REQUEST_CODE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
mNewFormFragment.getGPSLocation();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
case Constants.MY_PERMISSIONS_CAMERA_REQUEST_CODE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
if (mNewFormFragment.checkStoragePermission()) {
mNewFormFragment.openCamera();
}
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
case Constants.MY_PERMISSIONS_STORAGE_REQUEST_FOR_CAMERA_CODE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
mNewFormFragment.openCamera();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
case RefreshRefrenceNumber.WRITE_PERMISSION_REQUEST_CODE_REF_NO: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
RefreshRefrenceNumber.refreshManagerInstance(this).refreshReferenceNumber();
RefreshMeterNumber.refreshManagerInstance(this).refreshMetetNumber();
RefreshImsiNumber.refreshManagerInstance(this).refreshImsiNumber();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
}
}}
任何帮助将不胜感激。
【问题讨论】:
-
我不知道您要做什么,但是要将片段打开到片段中,您应该在父片段中创建一个框架布局,并通过单击任何按钮将子片段替换为它..
-
我不想开始任何其他活动我想在我的父片段上打开
frameLayout -
我不建议您在同一个活动中打开任何其他活动 替换 framelayout 中的 fragmentA 并在 fragmentA 的 xml 中创建另一个框架布局并添加 fragmentB...
-
@MajidAli 没有正确理解
标签: android android-studio android-fragments barcode-scanner