首页 > 解决方案 > 无法从另一个片段中打开一个片段 - 每个片段都混合在一起,两个片段同时在一个屏幕上

问题描述

我想从另一个片段中打开一个片段。但结果我得到了这个(两个混合片段):

在此处输入图像描述

以下是我想要转到下一个片段的片段的代码: public class ChatRoomFragment extends Fragment implements View.OnClickListener in l1.setOnItemClickListener{

    DatabaseReference reference;
    static HashMap<String, String> dataHashMap = new HashMap<String, String>();
    ArrayList<String> arrayList;
    EditText e1;
    ListView l1;
    ArrayAdapter<String> adapter;
    String name;
    EditText ee;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.chatroom_fragment, container, false);
        Button button = view.findViewById(R.id.button);
        button.setOnClickListener(this);
        super.onCreate(savedInstanceState);
        e1 = (EditText)view.findViewById(R.id.editText);
        l1 = (ListView)view.findViewById(R.id.listView);
        arrayList = new ArrayList<>();

        adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,arrayList);
        l1.setAdapter(adapter);

        FirebaseOptions options = new FirebaseOptions.Builder()
                .../setting options
        FirebaseApp.initializeApp(getActivity(), options, "secondary");
        FirebaseApp app = FirebaseApp.getInstance("secondary");
        reference = FirebaseDatabase.getInstance(app).getReference().getRoot();
        request_username();

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                Set<String> set = new HashSet<String>();


                Iterator i = dataSnapshot.getChildren().iterator();
                while (i.hasNext()) {
                    set.add(((DataSnapshot) i.next()).getKey());

                }

                arrayList.clear();
                arrayList.addAll(set);
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                //Toast.makeText(NavigationDrawerActivity.this, "No network connectivity", Toast.LENGTH_SHORT).show();
            }
        });
        ChatFragment fragment = new ChatFragment();


        l1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                dataHashMap.put("room_name", ((TextView) view).getText().toString());
                dataHashMap.put("user_name", name);
                getActivity().getSupportFragmentManager()
                        .beginTransaction()
                        .replace(R.id.fragment_container, fragment)
                        .commit();
            }
        });

        return view;

    }

    public void request_username()
    {
        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Enter your name?");
        ee = new EditText(getActivity());
        builder.setView(ee);
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                name = ee.getText().toString();
            }
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                dialogInterface.cancel();
                request_username();


            }
        });
        builder.show();

    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
            insert_data(v);
                break;
        }
    }
    public void insert_data(View v)
    {
        switch (v.getId()) {
            case R.id.button :
                Map<String, Object> map = new HashMap<>();
                map.put(e1.getText().toString(), "");
                reference.updateChildren(map);
        }
    }

}

这是我想去的片段的代码:

    EditText e1;
    TextView t1;

    private String user_name,room_name;

    DatabaseReference reference;
    String temp_key;



    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.chat_fragment, container, false);
        Button button = view.findViewById(R.id.button2);
        button.setOnClickListener(this);
        super.onCreate(savedInstanceState);
        e1= view.findViewById(R.id.editText2);
        t1= view.findViewById(R.id.textView);
        if(((AppCompatActivity)getActivity()).getSupportActionBar()!=null)
        {
            ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
        }

        Log.d("checkintent", getActivity().getIntent().toString());
        //user_name = getActivity().getIntent().getExtras().get("user_name").toString();
        user_name = ChatRoomFragment.dataHashMap.get("user_name").toString();
        //room_name = getActivity().getIntent().getExtras().get("room_name").toString();
        room_name = ChatRoomFragment.dataHashMap.get("room_name").toString();
        FirebaseApp app = FirebaseApp.getInstance("secondary");
        reference = FirebaseDatabase.getInstance(app).getReference().getRoot();
        getActivity().setTitle(" Room - "+room_name);


        reference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                append_chat(dataSnapshot);
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                append_chat(dataSnapshot);
            }
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
            }
            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
                append_chat(dataSnapshot);
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
        return view;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId() == android.R.id.home)
            getActivity().finish();
        return super.onOptionsItemSelected(item);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button2:
                send(v);
                break;
        }
    }

    public void send(View v)
    {
        Map<String,Object> map = new HashMap<String,Object>();
        temp_key = reference.push().getKey();
        reference.updateChildren(map);

        DatabaseReference child_ref = reference.child(temp_key);
        Map<String,Object> map2 = new HashMap<>();
        map2.put("name",user_name);
        map2.put("msg", e1.getText().toString());
        child_ref.updateChildren(map2).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                Toast.makeText(getActivity().getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
            }
        });
        e1.setText("");
    }
    public void append_chat(DataSnapshot ss)
    {
        String chat_msg,chat_username;
        Iterator i = ss.getChildren().iterator();
        while(i.hasNext())
        {
            chat_msg = ((DataSnapshot)i.next()).getValue().toString();
            chat_username = ((DataSnapshot)i.next()).getValue().toString();
            t1.append(chat_username + ": " +chat_msg + " \n");
        }
    }
}

我应该改变什么才能ChatFragment只打开而不是同时打开两个片段?(我只需要粉红色的物品出现在屏幕上)

标签: javaandroidandroid-fragmentsandroid-intent

解决方案


推荐阅读