Android片段看起来很开销

时间:2017-10-14 22:21:14

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

MainActivity有2个按钮,当我点击按钮时,我希望2个片段出现在同一个页面中。但是当我点击它的MeContact按钮时,它出现了,但当我点击PhoneContact按钮时,我覆盖了另一个

MainActivity.java

 public class MainActivity extends AppCompatActivity {

Button itsMeContact,phoneContact;

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



    itsMeContact= (Button) findViewById(R.id.its_me_contact);
    phoneContact= (Button) findViewById(R.id.phone_contact);

    itsMeContact.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            FragmentManager manager = getFragmentManager();
            UserFragment userFragment = new UserFragment();
            FragmentTransaction transaction = manager.beginTransaction();
            transaction.add(R.id.frame_layout, userFragment, "userFragment");

            transaction.commit();
        }
    });

    phoneContact.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentManager manager = getFragmentManager();
            FragmentB fragmentB = new FragmentB();
            FragmentTransaction transaction = manager.beginTransaction();
            transaction.add(R.id.frame_layout, fragmentB, "fragg");

            transaction.commit();
        }
    });

}

}

UserFragment.java

 public class UserFragment extends Fragment {
RecyclerView recyclerView ;
UserAdapter userAdapter ;
ArrayList<Person> arrayList ;
private LinearLayoutManager layoutManager;
Button itsMeContact,phoneContact;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_user,container,false);


    recyclerView =  view.findViewById(R.id.recycler_view);
    itsMeContact= view.findViewById(R.id.its_me_contact);


    layoutManager = new LinearLayoutManager(getActivity());
    layoutManager.scrollToPosition(0);
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(layoutManager);
    arrayList=new ArrayList<Person>();

    initial();

    return view;
}

private void initial() {
    Factory.getInstance().user().enqueue(new Callback<List<User>>() {
        @Override
        public void onResponse(Call<List<User>> call, Response<List<User>> response) {
            // textView.setText(response.body().get(0).name);
            userAdapter= new UserAdapter(response.body(), getActivity());
            recyclerView.setAdapter(userAdapter);

        }

        @Override
        public void onFailure(Call<List<User>> call, Throwable t) {

        }
    });

}

}

FragmentB.java

 public class FragmentB extends Fragment {
TextView textView;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_fragment_b,container,false);
    textView=view.findViewById(R.id.textView);
    textView.setText("naber");

    return  view;
}

}

您的建议对我很重要!

非常感谢

我的应用: enter image description here

1 个答案:

答案 0 :(得分:0)

您执行的每个Fragment事务都使用相同的framelayout:&#34; R.id.frame_layout&#34;。

所以这是正常的,如果&#34;它看起来很开销&#34;。如果您希望在同一布局中显示2个片段,则应使用2个不同的framelayout。