- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 memberRecList RecyclerView,我尝试水平列出组中的每个成员,但在设置其适配器时遇到此问题:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
注意:我在评论中添加了一些注释,滚动到底部即可查看它们。
这是 RecycleView 初始化:
// I do InitMemberList() in the OnCreate method of my activity
private void InitMemberList()
{
LinearLayoutManager layoutManager =
new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
memberRecList = (RecyclerView) findViewById(R.id.member_list);
memberRecList.setHasFixedSize(true);
memberRecList.setLayoutManager(layoutManager);
//NOTE 1 (scroll to bottom)
}
我的数据集是ArrayList成员。我使用 FirebaseDatabase 从工作线程中检索它,如下所示:
//this is also in the OnCreate() method, doesn't matter if it's before
//or after InitMembersList() because it starts a separate thread.
//I'm showing it just in case I have any errors here
private void GetMemberInfo(final String userId)
{
//NOTE 2 (scroll to bottom)
//Getting the reference of the database
DatabaseReference ref = userDB.getReference().getRef();
Query query = ref.child(userId);
//Firebase's method names are confusing. These below just retrieve the
//data from the database ONCE.
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
tempMember = dataSnapshot.getValue(User.class); //Getting member info
members.add(tempMember); //adding member info to the list
memberCount --; //number of members left to retrieve
if(memberCount == 0) {
//NOTE 3 (scroll to bottom)
PopulateMemberList(); //the adapter is set inside here
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
我在 PopulateMemberList() 方法中设置 members 适配器,如下所示:
private void PopulateMemberList()
{
MembersListAdapter adapter = new MembersListAdapter(members);
memberRecList.setAdapter(adapter);
}
这是我的自定义MembersListAdapter:
public class MembersListAdapter extends RecyclerView.Adapter<MembersListAdapter.MemberViewHolder> {
private ArrayList<User> users = new ArrayList<>();
public MembersListAdapter(ArrayList<User> users) {
this.users = users;
}
public class MemberViewHolder extends RecyclerView.ViewHolder{
TextView rep_txt;
ImageView memberImageView;
public MemberViewHolder(View itemView) {
super(itemView);
rep_txt = (TextView) itemView.findViewById((R.id.member_rep_text));
memberImageView = (ImageView) itemView.findViewById(R.id.member_profile_image);
}
}
@Override
public int getItemCount() {
return users.size();
}
@Override
public MemberViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//NOTE 4 (scroll to bottom)
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.member_list_item, parent, true);
return new MemberViewHolder(itemView);
}
@Override
public void onBindViewHolder(MemberViewHolder holder, int position) {
final User currentMember = users.get(position);
//changing the text of my textviews
//Loading Member Image
Picasso.with(GroupActivity.this)
.load(currentMember.getProfile_picture_ref())
.into(holder.memberImage);
}
注 1: 我尝试首先在 InitMemberList() 内将 memberRecList 适配器设置为空适配器,然后在从 Firebase 获取数据后设置新适配器。没用。给了我同样的错误。
注 2: 我在循环中使用 GetMemberInfo(),其中我一一传递 userId。 Firebase 专家会告诉我改为使用 dataSnapshot.getChildren() 创建一个 foreach 循环来一一检索用户,然后过滤它们,但由于我的数据库大小,这是不可行的。我会扫描 100 万用户,只是为了检索其中 5 个。
注 3: 使用 memberCount 来查找成员列表检索是否已完成,使我能够在之后开始处理数据>完全检索。如果没有这个,尝试访问数据会出现空指针异常,因为大部分数据无法及时接收。
注4:我假设这就是我的错误所在?我尝试获取 itemView 父级,然后从中删除 **itemView* (正是错误消息所说的我应该做的事情):
@Override
public MemberViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.member_list_item, parent, true);
ViewGroup mParent = (ViewGroup) itemView.getParent();
if(mParent!=null)
mParent.removeView(itemView);
return new MemberViewHolder(itemView);
}
但我收到一百万个以下错误实例:
E/AndroidRuntime: at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:6688)
然后出现 StackOverflow 错误并且应用程序崩溃:
D/Error: ERR: exClass=java.lang.StackOverflowError
D/Error: ERR: exMsg=stack size 8MB
D/Error: ERR: file=ViewGroup.java
D/Error: ERR: class=android.view.ViewGroup
D/Error: ERR: method=resetResolvedLayoutDirection line=6687
D/Error: ERR: stack=java.lang.StackOverflowError: stack size 8MB
在 android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:6687)
之后,最后一行重复至少 100 次,最后:
D/Error: ERR: TOTAL BYTES WRITTEN: 41276
编辑:忘了提及,我知道 FirebaseRecyclerAdapter 存在,但我无法使用它。如果您知道其他可以帮助我的图书馆,请告诉我。另外,我更喜欢使用 ListView 而不是 RecyclerView,但我需要水平列出项目(以便我可以向左/向右滚动),而且我认为 ListView 不可能做到这一点。
最佳答案
由于以下原因,您会收到 IllegalStateException
:
@Override
public MemberViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//NOTE 4 (scroll to bottom)
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.member_list_item, parent, true);
return new MemberViewHolder(itemView);
}
当您为 RecyclerView
填充 View 时,您不应将其添加到其父级,Android 会为您完成此操作。在以下行中将标志更改为 false
以不将 View 添加到父级:
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.member_list_item, parent, false);
关于java - 从工作线程使用 RecyclerView.setAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42274411/
我在我的 fragment 类上使用 ExpandableListView,运行时出现以下错误, `java.lang.RuntimeException: For ExpandableListVie
我使用Recycleview创建了一个“水平 ListView ”。 由于我的程序中有 async 任务,我无法从 fetchbook 类检索图书结果,因此我需要在类内设置适配器。 我的代码如下所示:
当我在 fragment 类中的代码底部调用 setAdapter 方法时,它导致我的应用程序在启动前崩溃。但是,当我将其注释掉时,该应用程序运行良好(显然没有适配器)。 package com.ex
当我在设置我的 ArrayList 后在我的构造函数中调用 .notifyDataSetChanged() 时,我的应用程序仍然崩溃,就像我在调用 .setAdapter 之前调用它一样,困扰我好几个
这个问题在这里已经有了答案: findViewById returning null in fragment (2 个答案) What is a NullPointerException, and
我正在尝试创建一个自定义的 ListView 适配器(大致基于 this tutorial ,但这个示例很简单,我怀疑您是否需要查看它)。 NewsEntriesAdapter.java public
我试图在 ListView 上设置适配器,但他们告诉我这个错误 Constructor 'com.test.test.MainActivity.Listview1Adapter.Listview1
使用 memberRecList RecyclerView,我尝试水平列出组中的每个成员,但在设置其适配器时遇到此问题: java.lang.IllegalStateException: The sp
我发现了几个与此类似的问题,但没有一个能解决我的问题。这是我写的代码 - DataBaseHelper dataBaseHelper; ArrayAdapter mAdapter; ListView
最后一行有一个NPE,我不知道它来自哪里。有什么想法吗? mySQLiteAdapter = new SQLiteAdapter(this); mySQLiteAdapter.openToRe
我只知道填充ListView的一种方法 my_listviev.setAdapter( new ArrayAdapter(this,android.R.layout.simple_list_ite
我有一个带有 3 个选项卡的 Activity,其中第一个是带有 ListView 的 fragment 。 ListView 有自定义适配器。当我开始以及当我进入第二个选项卡并返回时没有问题。但是当
当我 catch NPE 时,我正在做 Coursera 类(class)的作业。这个问题好几天都无法解决,不解决就无法继续。谷歌没有帮助。页面下方更新了代码这是我的代码: 主要 Activity L
我正在尝试使用游标适配器,但是当我调用setAdapter时出现空指针异常,我不知道问题出在哪里。代码如下: 主要 fragment : public class GroupsFragment ext
我正在尝试创建一个简单的应用程序,当单击操作栏中的“连接”项时,它会在对话框中显示已配对蓝牙设备的列表。这是我正在膨胀的对话框的 XML: 这是 MainActivity.ja
有没有可能使用仅包含特定项目的 setAdapter 在 ListView 中添加项目?例如,我想在 ListView 中添加一个仅包含日期“2015 年 2 月 15 日”的项目。 代码如下:
我在pager.setAdapter(tabpager); 这是代码,请检查一下,让我知道错误 主要 Activity 的 Java 代码 package com.example.protot
我不明白为什么 NPE 会在这里发生。花了很多时间试图弄清楚这一点。使用日志我发现崩溃的地方(Records.class ...向下滚动)。如果需要,我还会提供每个代码文件。我发现它不是上下文为空。
嗨我有一个使用 setAdapter 绑定(bind)数据的 ListView ,但是当我尝试绑定(bind)时它显示空点异常 public void onCreate(Bundle savedIns
我有三个可滑动的标签。在第一个选项卡中,我有一个包含 1000 多个项目的 ListView 。 我尝试使用 Asynctask 和 Runnable 填充列表,我对此没有问题。 问题是当我试图将适配
我是一名优秀的程序员,十分优秀!