全屏对话框片段无法正确显示

时间:2017-04-17 20:21:28

标签: android android-fragments android-dialogfragment

我有两个问题: 在我的应用程序中,我有一个appbar活动和一个回收者视图。 当我单击浮动操作菜单的选项时,它会显示全屏对话碎片,但由于某种原因,对话框显示不正确(不是完全全屏)。

结果如下 dialogfragment 此外,当我单击对话框的关闭按钮时,它不仅会关闭对话框,还会关闭活动,并转到上一个活动。 我该怎么办。我开始使用Android。 我也想为cardview建立一个保证金(左和右)

这是我的代码

Result_contract.java

公共类Result_contract扩展了AppCompatActivity实现

FragmentActions {     String TAG =“Result_contract”;

private boolean first_time= true;
private List<Contract>lista_contratos;
private FloatingActionsMenu fabm;
private RecyclerView recycler;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager lManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_result_contract);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Contratos");//Set title

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);//Enable Back button
    fabm= (FloatingActionsMenu)findViewById(R.id.menu_fab);

    View fab_buscar =  findViewById(R.id.accion_buscar);
    fab_buscar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showSearchDialog();

        }
    });
    View fab_formulario =  findViewById(R.id.accion_formulario);
    fab_formulario.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showDetailsDialog(0);
        }
    });


    recycler = (RecyclerView) findViewById(R.id.reciclador);
    recycler.setHasFixedSize(true);
    lManager = new LinearLayoutManager(this);
    recycler.setLayoutManager(lManager);

    //todo REMOVER ESTO
   //SearchContractTask buscar = new SearchContractTask(Contract_query_instance.getInstance().getContractQuery());
    //buscar.execute();
    SearchContractTask buscar = new SearchContractTask(null);
    buscar.execute();


}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; goto parent activity.
            this.finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void showDetailsDialog(int position) {
    fabm.collapse();

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

    Fragment fragment=new Dialog_contract();
    Bundle args=new Bundle();
    args.putInt("position",position);
    fragment.setArguments(args);
    transaction.add(android.R.id.content, fragment,"dialog_contract").addToBackStack(null).commit();



}

@Override
public void showSearchDialog() {
    fabm.collapse();

}

@Override
public void load_data() {

}

public class SearchContractTask extends AsyncTask<Void, Void, Void> {
    Connection cnx;
    Models models;
    Contract_query query;
    public SearchContractTask(Contract_query query) {
        super();
        cnx = Connection.getConnection();
        models= Models.getInstance();
        this.query=query;
    }

    @Override
    protected Void doInBackground(Void... voids) {

        lista_contratos=Contract_list.getInstance().getList_contract();
        return null;
    }


    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);

        if (lista_contratos!=null) {
            adapter = new Contract_adapter(lista_contratos);
            recycler.setAdapter(adapter);


        }
        else {
            //TODO  MOSTRAR UN MENSAJE DE QUE NO EXISTEN FILAS EN LA CONSULTA
        }
    }

    @Override
    protected void onCancelled() {

    }



}
@Override public boolean dispatchTouchEvent(MotionEvent event){
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        if (fabm.isExpanded()) {

            Rect outRect = new Rect();
            fabm.getGlobalVisibleRect(outRect);

            if(!outRect.contains((int)event.getRawX(), (int)event.getRawY()))
                fabm.collapse();
        }
    }

    return super.dispatchTouchEvent(event);
}

@Override
public void onBackPressed() {
    if (fabm.isExpanded()) {

            fabm.collapse();
        }
    else{
        finish();

    }
    //super.onBackPressed();
}

}

activity_reult_contract.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.example.ernesto.apptranscargo.Result_contract">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_result_contract" />

    <com.getbase.floatingactionbutton.FloatingActionsMenu
        android:id="@+id/menu_fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end|bottom"
        android:layout_margin="@dimen/fab_margin"
        app:fab_labelStyle="@style/Etiquetas"
        app:fab_addButtonColorNormal="?attr/colorPrimary"
        app:fab_addButtonSize="normal"

        app:fab_labelsPosition="left">

        <com.getbase.floatingactionbutton.FloatingActionButton
            android:id="@+id/accion_formulario"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:fab_colorNormal="?attr/colorAccent"
            app:fab_icon="@drawable/ic_tablet"
            app:fab_size="normal"
            app:fab_title="Formulario" />

        <com.getbase.floatingactionbutton.FloatingActionButton
            android:id="@+id/accion_buscar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:fab_colorNormal="?attr/colorAccent"
            app:fab_icon="@drawable/ic_search"
            app:fab_size="normal"
            app:fab_title="Nueva Búsqueda" />

    </com.getbase.floatingactionbutton.FloatingActionsMenu>

</android.support.design.widget.CoordinatorLayout>

content_result_contract.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/reciclador"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="3dp"
    android:layout_marginTop="20dp"

    android:scrollbars="vertical" />

Dialog_contract.java

public class Dialog_contract extends DialogFragment implements DialogActions {

    public static final String TAG = "fragment_dialog";

    private TabLayout Tabs;
    private Form_contract_detail fragment_detalles;
    private Form_contract_observation fragment_obseration;
    private Fragment fragment_observation;
    View view_contract;
    ViewPager pager;
    PagerAdapter pagerAdapter;
    Toolbar toolbar;
    String title="Detalles  ";
    int cantidad;

    public Dialog_contract(){
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void  Dismiss()
    {
        getDialog().dismiss();

    }


    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container,
                             Bundle savedInstanceState) {
        cantidad= Contract_list.getInstance().getList_contract().size();
        view_contract=inflater.inflate(R.layout.dialog_contract, container, false);

        pager=(ViewPager)view_contract.findViewById(R.id.pager);
        pagerAdapter= new Dialog_contract_adapter(getActivity(), getChildFragmentManager(),Contract_list.getInstance().getList_contract().size());

       toolbar = (Toolbar) view_contract.findViewById(R.id.toolbar);


        ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);

        ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setHomeButtonEnabled(true);
            actionBar.setHomeAsUpIndicator(android.R.drawable.ic_menu_close_clear_cancel);
        }
        setHasOptionsMenu(true);

        int position=getArguments().getInt("position", -1);
        pager.setAdapter(pagerAdapter);
        pager.setPageTransformer(true, new ZoomOutPageTransformer());
        //pager.setPageTransformer(true,new DepthPageTransformer() );
        pager.setCurrentItem(position);

        pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                updateTitle();
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });


        updateTitle();
        return view_contract;
    }



    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        return dialog;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.clear();
        getActivity().getMenuInflater().inflate(R.menu.dialog_contract_menu, menu);


    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.action_next) {
            pager.setCurrentItem(pager.getCurrentItem() + 1);
           updateTitle();
            return true;
        } else if (id==R.id.action_previous)
        {

            pager.setCurrentItem(pager.getCurrentItem() - 1);
           updateTitle();
            return true;
        }

        else if (id == android.R.id.home) {
            // handle close button click here
            dismiss();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void updateTitle() {
        toolbar.setTitle(title+String.valueOf(pager.getCurrentItem()+1)+"/"+cantidad);

    }

}

dialog_contract.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="24dp"
    android:fitsSystemWindows="true"

    >

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay"
        android:fitsSystemWindows="false"
        >

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            android:fitsSystemWindows="false"/>

    </android.support.design.widget.AppBarLayout>



    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">


        <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <android.support.v4.view.PagerTabStrip
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="top"/>

        </android.support.v4.view.ViewPager>

    </LinearLayout>

1 个答案:

答案 0 :(得分:0)

首先,您的对话框布局具有顶部填充,以便它没有完整高度。

dialog_contract.xml

 <android.support.design.widget.CoordinatorLayout
 ...
 android:paddingTop="24dp"
 >

其次尝试关注java naming convention,因为您的代码难以阅读

  

当我单击对话框的关闭按钮时,它不仅会关闭对话框,还会关闭活动,并转到上一个活动。

我最好的猜测是你没有正确处理菜单点击,尝试调用

setHasOptionsMenu(true);
来自dialogFragmen onCreate