- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 layout
中,我有一个 recyclerview
包含 cardviews
的单元格,理论上,它包含一个 framelayout
。理想情况下,cardview
中的 framelayout
可以使用依赖于用于填充查看
。但是,当我有多个单元格时,只有一个单元格包含 framelayout
。这种现象在屏幕上显示为:
用于初始化 recyclerview 单元格的查看器的代码如下所示:
public class JokesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView userName;
TextView likeCounterTextView;
TextView commentCounterTextView;
TextView timeStampTextView;
CircleImageView profileImg;
ImageButton likeButton;
ImageButton options;
ImageButton comments;
FrameLayout frameLayout;
public JokesViewHolder(View view) {
super(view);
timeStampTextView = view.findViewById(R.id.time_date_textView);
frameLayout = view.findViewById(R.id.post_content);
profileImg = view.findViewById(R.id.profile_imageview);
userName = view.findViewById(R.id.username_textView);
options = view.findViewById(R.id.options_imageButton);
options.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//todo open custom dialog
}
});
likeButton = view.findViewById(R.id.favorite_imageButton);
likeCounterTextView = view.findViewById(R.id.likes_counter_textView);
comments = view.findViewById(R.id.comment_imageButton);
commentCounterTextView = view.findViewById(R.id.comment_counter_textView);
view.setOnClickListener(this);
view.setTag(this);
}
@Override
public void onClick(View view) {
//todo open fragment to show all post data plus comments
}
}
@Override
public void onBindViewHolder(final JokesViewHolder holder, int position) {
final Joke joke = jokes.get(position);
holder.userName.setText(joke.getUser());
Constants.DATABASE.child("users/" + joke.getUID() + "/urlString")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String url = dataSnapshot.getValue(String.class);
Glide.with(context).load(url).into(holder.profileImg);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Constants.DATABASE.child("userpostslikescomments/" + joke.getUID() + "/" + joke.getPushId() + "/likes/num")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Integer num = dataSnapshot.getValue(Integer.class);
holder.likeCounterTextView.setText(Integer.toString(0));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Constants.DATABASE.child("userpostslikescomments/" + joke.getUID() + "/" + joke.getPushId() + "/comments/num")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Integer num = dataSnapshot.getValue(Integer.class);
holder.commentCounterTextView.setText(Integer.toString(0));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Constants.DATABASE.child("userpostslikescomments/" + joke.getUID() + "/" + joke.getPushId() + "/likes/list/" + Constants.UID)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
holder.likeButton.setImageResource(R.drawable.ic_favorite_black_24dp);
} else {
holder.likeButton.setImageResource(R.drawable.ic_favorite_border_black_24dp);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
if (joke.getMediaURL().equals("")) {
Bundle bundle = new Bundle();
bundle.putString("jokeTitle", joke.getJokeTitle());
bundle.putString("jokeBody", joke.getJokeBody());
bundle.putString("tagline", joke.getTagline());
//may not work
TextPostContent tpc = new TextPostContent();
tpc.setArguments(bundle);
((android.support.v4.app.FragmentActivity) context).getSupportFragmentManager()
.beginTransaction().add(holder.frameLayout.getId(), tpc).commit();
} else if (joke.getMediaURL().contains(".png")) {//may need to take into account more file types
Bundle bundle = new Bundle();
bundle.putString("media_url", joke.getMediaURL());
bundle.putString("tagline", joke.getTagline());
ImagePostContent ipc = new ImagePostContent();
ipc.setArguments(bundle);
((android.support.v4.app.FragmentActivity) context).getSupportFragmentManager()
.beginTransaction().add(holder.frameLayout.getId(), ipc).commit();
} else {
Bundle bundle = new Bundle();
bundle.putString("media_url", joke.getMediaURL());
bundle.putString("tagline", joke.getTagline());
VideoPostContent vpc = new VideoPostContent();
vpc.setArguments(bundle);
((android.support.v4.app.FragmentActivity) context).getSupportFragmentManager()
.beginTransaction().add(holder.frameLayout.getId(), vpc).commit();
}
holder.timeStampTextView.setText(joke.getTimeStamp());
holder.likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String path = "userpostslikescomments/" + joke.getUID() + "/" + joke.getPushId() + "/likes/list/" + Constants.UID;
Constants.DATABASE.child(path)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Constants.DATABASE.child(path).removeValue();
holder.likeButton.setImageResource(R.drawable.ic_favorite_border_black_24dp);
} else {
Constants.DATABASE.child(path).setValue(true);
holder.likeButton.setImageResource(R.drawable.ic_favorite_black_24dp);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
});
holder.comments.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//todo start animation between fragments
//todo show recyclerview of comments
}
});
}
我的直觉告诉我,我应该以编程方式添加 View (如 textviews
和 imageviews
),而不是执行 fragment 事务。但我想知道是否有一种方法可以使用我已经创建的 fragment
类来填充 cardviews
的 framelayout
?
最佳答案
为了确保 recyclerview 中的每个单元格都有一个由文本、图像或视频填充的框架布局(相对于只有一个单元格的框架布局填充了应该分成多个单元格的信息)你在通过 findViewById(int)
找到对框架布局的引用后,应该调用 frameLayout.setId(View.generateViewId())
。快速滚动会导致 fatal error 。另一种解决方案是为不同类型的单元格创建多个 View 持有者。
关于android - Framelayout 不会保留在 recyclerview 单元格中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47625272/
我正在尝试使用 RelativeLayout 扩充 FrameLayout。然后我像这样扩展一个 FrameLayout: public class Keyboard extends FrameLay
在我的应用程序中,我有一个布局,它有一个 RelativeLayout 我想在运行时以编程方式设置边距。但是当我这样做时,它给了我 ClassCastException 说 FrameLayout 不
我在横向模式下的 FrameLayout 中打开 android Camera,然后屏幕看起来像- 但是当我在 FrameLayout 中的 ImageView 中打开相同的图像时,它看起来像 - 请
我在画廊中使用了 FrameLayout 作为画廊项目。 FrameLayout 中有 2 个 RelativeLayouts,每个都有一些 TextView 和一个 ImageView。图库外有一个
我目前正在使用 xml 为 Activity 创建布局,内容 (FrameLayout) 应该填满整个屏幕。不幸的是,事实并非如此。只有当我将边距更改为以下时,它才有效: 左:-17dp 右:-19d
我有一个 View (假设它是 MyFramLayout)扩展了 FrameLayout,我无法在按下键时让这个 FrameLayout 获得焦点(我在电视平台上工作)。 布局是这样的:
我正在尝试设置一个平板电脑布局,左侧是一个列表,右侧是一个详细信息 Pane 。单击列表项时,详细信息 Pane 将填充一系列比左侧列表更长的卡片。我希望详细信息 Pane 和列表(回收站 View
我用按钮创建了一个布局,这个按钮有逻辑,我不想集成它。 所以我认为: 当我有按钮时,我需要添加一个 char $,所以我创建了一个 frameLayout 并在此处添加了一个 TextView,我这样
我正在使用 FrameLayouts 在图像上重叠图像,但在这种特殊情况下我无法理解我的内部 FrameLayout 没有显示在另一幅图像的前面。这是理论: 这是实际的事情: 这是我的 XML:
在 FrameLayout 中,我动态添加了一个 WebView,用于在旋转屏幕时保存内容,但事实并非如此,情况是在 FrameLayout 下面我想放置一个固定的页脚。下一个代码放置页脚,但 Fra
我在加载 fragment Activity 时意外收到空指针异常错误。我指的是 FrameLayout 将用户定向到另一个 Activity (在单击按钮时)。 11-10 07:31:58.773
我想测试使用 fragment 管理器动态替换 fragment 。在主布局中,在父衬里布局下,我有 3 个布局,一个子线性布局和 2 个子框架布局。这个想法是在第一个子线性布局中使用一个按钮来交换第
我正在开发 Android 即时聊天应用程序。在聊天 Activity 中,我正在使用 FrameLayout。以下是 xml 文件: 我已将框架的可见性设置为
这是有效的: a) main.xml 中带有两个 ImageView 的 FrameLayout b) 在背景上旋转动画,而前景部分保持不变 因为我需要对背景图像做更多的工作,
我有以下问题:我有很长的 ListView,但是当我向上滚动时会触发 onRefresh,而不是先滚动回顶部。我该如何解决这个问题? 我将以下 fragment 插入到 FrameLay
我有一个 FrameLayout,上面显示了一个 LinearLayout我的 Intent 是这个 LinearLayout 总是占据屏幕的 33%……但我做不到。我尝试使用“dp”,但当然,结果因
是否有一种布局,其中的项目可以像 Android 的 FrameLayout 一样分层放置? 我已经在谷歌上搜索了一段时间,但找不到类似的东西。 最佳答案 我希望这个答案很清楚并且可以帮助您。您需要的
我是第一次使用 NavigationBar 小部件,我无法将 FrameLayout 设置为不在 NavigationBar 后面。我已经尝试了一切:在 RelativeLayout 中设置(Navi
我有以下 View 层次结构: 我尝试设置 ImageView 的下边距,在布局编辑器上它似乎工作正常,但是当我运行代码时,我设置的下边距被丢弃了。
我有这样的布局: 相对布局 框架布局 fragment (谷歌地图图层) 复选框 ...其他按钮和东西 现在我想在选中 Checkbox 时捕获 FrameLayout 上的触摸事件。我用 dispa
我是一名优秀的程序员,十分优秀!