在活动

时间:2017-02-13 19:27:52

标签: java android android-layout android-fragments android-recyclerview

我有一个简单的布局,包含回收站视图和框架布局,我想要显示一个片段。我的想法是,我有一个在recycler视图中显示的数据列表 - (我用imageView和textView注入cardview)和frameLayout,它是我片段的容器。单击一个项目后,它应显示一个包含详细信息的片段。我知道更好的方法是有两个片段并改变它们,但由于我只有一个活动和两个屏幕,我想只有一个片段。

这是布局:

  <?xml version="1.0" encoding="utf-8"?>

    <RelativeLayout

    xmlns:tools="http://schemas.android.com/tools"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="michael.com.ui.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/list"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="#00000000"/>

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/donut_progress"
        android:layout_alignParentStart="true"/>
    </RelativeLayout>

==

public class MainActivity extends AppCompatActivity  {
    @BindView(R.id.list) RecyclerView mRecyclerView;
    @BindView(R.id.container) FrameLayout container;
    @Inject Service service;

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

        ButterKnife.bind(this);

        setRecyclerView();

        TeamPresenter mPresenter = new TeamPresenter(service, this);
        mPresenter.getContacts();

    }

    private void setRecyclerView() {
        mRecyclerView.setLayoutManager(new GridLayoutManager(getApplicationContext(), 2));
    }


    @Override
    public void onLoadingFailed(String error) {
        Toast.makeText(getApplicationContext(),error,Toast.LENGTH_LONG).show();
    }

    @Override
    public void showContacts(Response response) {

        ContactsAdapter mAdapter = new ContactsAdapter(response.getContacts(),
                new ContactsAdapter.OnItemClickListener() {
                    @Override
                    public void onClick(Contacts item) {

                    initFragment(DetailsFragment.newInstance());

                    }
                });
        mRecyclerView.setAdapter(mAdapter);

    }


    private void initFragment(Fragment detailFragment) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(R.id.container, detailFragment, "TAG");
        transaction.addToBackStack("TAG");
        transaction.commit();
    }
}

我知道在初始化片段时,我可能会设置隐身到RecyclerView的可见性。但是,如何处理片段中的pressBack按钮以返回主屏幕?

2 个答案:

答案 0 :(得分:2)

您可以创建实现主要活动的界面。

创建界面

public interface FragmentListener {

    public void listen();
}

将您的界面实例声明为片段onResume()方法

public void onResume(){
FragmentListener listener= (FragmentListener ) getActivity();
listener.listen();

}

在主活动中覆盖listen方法

@Override
public void listen(){
     recyclerView.setVisibility(GONE)
}

答案 1 :(得分:0)

您可以通过ViewPager.setCurrentItem(int pos,boolean smoothScroll)方法实现此目的