IllegalIllegalStateException:指定的子代已经有一个父代。您必须先在孩子的父级上调用removeView()。

问题描述 投票:0回答:2
所以我遇到了这个错误(就像其他50,000个人一样),我已经仔细研究了他们的错误/答案,但仍然不知道该如何解决我的问题。有人可以查看我的代码并告诉我错误在哪里/我应该如何解决?谢谢。

哦,我是编码的新手,所以我不知道错误在哪里... Logcat不会告诉我是哪个行/片段/类/导致崩溃的原因。非常抱歉,每行代码都合法。

[如果有人想向我解释在世界上哪里可以找到此错误,那也很好。多谢你们!

package com.e.whosin.Adapter; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.e.whosin.CommentsActivity; import com.e.whosin.FollowersActivity; import com.e.whosin.Fragment.PostDetailFragment; import com.e.whosin.Fragment.ProfileFragment; import com.e.whosin.Model.Post; import com.e.whosin.Model.User; import com.e.whosin.R; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder>{ public Context mContext; public List<Post> mPost; private FirebaseUser firebaseUser; public PostAdapter(Context context, List<Post> post) { mContext = context; mPost = post; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(mContext).inflate(R.layout.post_item, viewGroup, false); return new PostAdapter.ViewHolder(view); } @Override public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) { firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); final Post post = mPost.get(i); Glide.with(mContext).load(post.getPostimage()) .apply(new RequestOptions().placeholder(R.drawable.portraitplaceholder)) .into(viewHolder.post_image); if (post.getDescription().equals("")){ viewHolder.description.setVisibility(View.GONE); } else { viewHolder.description.setVisibility(View.VISIBLE); viewHolder.description.setText(post.getDescription()); } publisherInfo(viewHolder.image_profile, viewHolder.username, viewHolder.publisher, post.getPublisher()); isLikes(post.getPostid(), viewHolder.like); nrLikes(viewHolder.likes, post.getPostid()); getComments(post.getPostid(), viewHolder.comments); isSaved(post.getPostid(), viewHolder.save); viewHolder.image_profile.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SharedPreferences.Editor editor = mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit(); editor.putString("profileid", post.getPublisher()); editor.apply(); ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit(); } }); viewHolder.username.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SharedPreferences.Editor editor = mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit(); editor.putString("profileid", post.getPublisher()); editor.apply(); ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit(); } }); viewHolder.publisher.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SharedPreferences.Editor editor = mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit(); editor.putString("profileid", post.getPublisher()); editor.apply(); ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit(); } }); viewHolder.post_image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SharedPreferences.Editor editor = mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit(); editor.putString("postid", post.getPostid()); editor.apply(); ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new PostDetailFragment()).commit(); } }); viewHolder.save.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (viewHolder.save.getTag().equals("save")){ FirebaseDatabase.getInstance().getReference().child("Saves").child(firebaseUser.getUid()) .child(post.getPostid()).setValue(true); } else { FirebaseDatabase.getInstance().getReference().child("Saves").child(firebaseUser.getUid()) .child(post.getPostid()).removeValue(); } } }); viewHolder.like.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (viewHolder.like.getTag().equals("like")){ FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid()) .child(firebaseUser.getUid()).setValue(true); addNotifications(post.getPublisher(), post.getPostid()); } else { FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid()) .child(firebaseUser.getUid()).removeValue(); } } }); viewHolder.comment.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(mContext, CommentsActivity.class); intent.putExtra("postid", post.getPostid()); intent.putExtra("publisherid", post.getPublisher()); mContext.startActivity(intent); } }); viewHolder.comments.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(mContext, CommentsActivity.class); intent.putExtra("postid", post.getPostid()); intent.putExtra("publisherid", post.getPublisher()); mContext.startActivity(intent); } }); viewHolder.likes.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, FollowersActivity.class); intent.putExtra("id", post.getPostid()); intent.putExtra("title", "likes"); mContext.startActivity(intent); } }); } @Override public int getItemCount() { return mPost.size(); } public class ViewHolder extends RecyclerView.ViewHolder{ public ImageView image_profile, post_image, like, comment, save; public TextView username, likes, publisher, description, comments; public ViewHolder(@NonNull View itemView) { super(itemView); image_profile = itemView.findViewById(R.id.image_profile); post_image = itemView.findViewById(R.id.post_image); like = itemView.findViewById(R.id.like); comment = itemView.findViewById(R.id.comment); save = itemView.findViewById(R.id.save); username = itemView.findViewById(R.id.username); likes = itemView.findViewById(R.id.likes); publisher = itemView.findViewById(R.id.publisher); description = itemView.findViewById(R.id.description); comments = itemView.findViewById(R.id.comments); } } private void getComments(String postid, final TextView comments){ DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Comments").child(postid); reference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { comments.setText("View All "+dataSnapshot.getChildren() + " Comments"); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } //To like posts and to show how many likes each post has private void isLikes(String postid, final ImageView imageView){ final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); DatabaseReference reference = FirebaseDatabase.getInstance().getReference() .child("Likes") .child(postid); reference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.child(firebaseUser.getUid()).exists()){ imageView.setImageResource(R.drawable.ic_liked); imageView.setTag("liked"); } else { imageView.setImageResource(R.drawable.ic_like); imageView.setTag("like"); } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } private void nrLikes (final TextView likes, String postid){ DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Likes") .child(postid); reference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { likes.setText(dataSnapshot.getChildrenCount()+" likes"); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } private void publisherInfo(final ImageView image_profile, final TextView username, final TextView publisher, String userid){ DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(userid); reference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { User user = dataSnapshot.getValue(User.class); Glide.with(mContext).load(user.getImageurl()).into(image_profile); username.setText(user.getUsername()); publisher.setText(user.getUsername()); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } private void addNotifications(String userid, String postid){ DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Notifications").child(userid); HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("userid", firebaseUser.getUid()); hashMap.put("text", "liked your post"); hashMap.put("postid", postid); hashMap.put("ispost", true); reference.push().setValue(hashMap); } private void isSaved(final String postid, final ImageView imageView){ FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Saves") .child(firebaseUser.getUid()); reference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.child(postid).exists()){ imageView.setImageResource(R.drawable.ic_save_black); imageView.setTag("saved"); } else { imageView.setImageResource(R.drawable.ic_save); imageView.setTag("save"); } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } }

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.e.whosin, PID: 23744
    java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
        at android.view.ViewGroup.addViewInner(ViewGroup.java:5099)
        at android.view.ViewGroup.addView(ViewGroup.java:4930)
        at android.view.ViewGroup.addView(ViewGroup.java:4870)
        at android.view.ViewGroup.addView(ViewGroup.java:4843)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:887)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
所以我遇到了这个错误(就像其他50,000个人一样),我已经仔细研究了他们的错误/答案,但仍然不知道该如何解决我的问题。有人可以看一下我的代码并告诉我...
java android view parent-child
2个回答
0
投票
或者也许是我现在考虑的这个活动引起了问题...

0
投票
package com.e.whosin.Fragment; import android.content.Context; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.e.whosin.Adapter.PostAdapter; import com.e.whosin.Model.Post; import com.e.whosin.R; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import java.util.ArrayList; import java.util.List; public class PostDetailFragment extends Fragment { String postid; private RecyclerView recyclerView; private PostAdapter postAdapter; private List<Post> postList; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_post_detail, container, false); SharedPreferences preferences = getContext().getSharedPreferences("PREFS", Context.MODE_PRIVATE); postid = preferences.getString("postid", "none"); recyclerView = view.findViewById(R.id.recycler_view); recyclerView.setHasFixedSize(true); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); recyclerView.setLayoutManager(linearLayoutManager); postList = new ArrayList<>(); postAdapter = new PostAdapter(getContext(), postList); recyclerView.setAdapter(postAdapter); readPost(); return view; } private void readPost() { DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts").child(postid); reference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { postList.clear(); Post post = dataSnapshot.getValue(Post.class); postList.add(post); postAdapter.notifyDataSetChanged(); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } }
© www.soinside.com 2019 - 2024. All rights reserved.