- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从 Firebase
中检索一些数据并使用 RecyclerView
显示它。
我的 RecyclerView
中有卡片,可以在其中检索文本和图像。
卡片上有一个按钮,可以启动 floaty。 . floaty 有一个 ImageView
和一个 TextView
,其中应显示单击按钮的卡片中的图像和文本。
问题是,当单击第一张卡片的那个按钮时, float 开始并显示相应卡片中的图像和文本,但是当我按下另一张卡片的按钮启动 float 时, float 开始但相应卡片中的图像和文本未显示在其中。
这是我的代码:
@Override
public void bindView(final ViewHolder holder) {
super.bindView(holder);
holder.progressBar.findViewById(R.id.progressBar_loading_image);
holder.imageUID.setText(imageUIDh);
holder.hDescription.setText(hDescription);
if (imageUIDh != null) {
holder.progressBar.setVisibility(View.VISIBLE);
if (imageUIDh.startsWith("https://firebasestorage.googleapis.com/") || imageUIDh.startsWith("content://")) {
Picasso.with(holder.itemView.getContext()).cancelRequest(holder.homelessImage);
Picasso.with(holder.itemView.getContext())
.load(imageUIDh)
.error(R.drawable.ic_warning_black_24dp)
.into(holder.homelessImage, new Callback() {
@Override
public void onSuccess() {
holder.progressBar.setVisibility(View.INVISIBLE);
}
@Override
public void onError() {
// TODO Auto-generated method stub
Toast.makeText(holder.itemView.getContext(), "Error occurred while loading images. Please retry.", Toast.LENGTH_SHORT).show();
}
});
final View head = LayoutInflater.from(holder.itemView.getContext()).inflate(R.layout.widget_chathead, null);
final View body = LayoutInflater.from(holder.itemView.getContext()).inflate(R.layout.content_help_request_chat_head, null);
holder.progressBar2 = (ProgressBar) body.findViewById(R.id.progressBar_loading_image_ch);
final ImageView hImageInFloaty = (ImageView) body.findViewById(R.id.hImageHF);
final TextView hDescriptionInFloaty = (TextView) body.findViewById(R.id.hDescriptionHF);
holder.btn_accept = (Button) holder.itemView.findViewById(R.id.btn_accept);
holder.btn_accept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (holder.isNetworkAvailable()) {
AlertDialog.Builder builder = new AlertDialog.Builder(holder.itemView.getContext());
builder.setMessage(R.string.request_accepted_txt);
builder.setPositiveButton("Yes button", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
holder.floaty = Floaty.createInstance(holder.itemView.getContext(), head, body, holder.NOTIFICATION_ID, notification);
holder.floaty.startService();
hDescriptionInFloaty.setText(holder.hDescription.getText().toString());
Picasso.with(holder.itemView.getContext())
.load(imageUIDh)
.error(R.drawable.ic_warning_black_24dp)
.into(hImageInFloaty, new Callback() {
@Override
public void onSuccess() {
holder.progressBar2.setVisibility(View.GONE);
}
@Override
public void onError() {
// TODO Auto-generated method stub
}
});
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(holder.itemView.getContext(), "The help-request has been rejected.", Toast.LENGTH_LONG).show();
}
});
AlertDialog dialog = builder.create();
dialog.show();
} else {
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(holder.itemView.getContext());
builder.setTitle("No internet connection!");
builder.setMessage("We need internet connection to navigate you more accurately. Please connect to the internet and then accept the help-request.");
builder.setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent intent = new Intent(Settings.ACTION_SETTINGS);
holder.itemView.getContext().startActivity(intent);
}
});
builder.setNegativeButton("Cancel", null);
builder.show();
}
}
});
}
由于漂浮物需要许可,我在获得许可后填充 recyclerview(仅适用于 Android M 及更高版本)。这是代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
startFloatyForAboveAndroidL();
}
这是 startFloatyForAboveAndroidL()
:
@TargetApi(Build.VERSION_CODES.M)
public void startFloatyForAboveAndroidL() {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intent, PERMISSION_REQUEST_CODE);
} else {
recyclerView.setAdapter(fastItemAdapter);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_CODE){
mSheetLayout.contractFab();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (requestCode == PERMISSION_REQUEST_CODE) {
if (Settings.canDrawOverlays(this)) {
recyclerView.setAdapter(fastItemAdapter);
} else {
Spanned message = Html.fromHtml("Please allow this permission, so <b>Floaties</b> could be drawn.");
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
}
}
尝试 Eric 的回答后的代码:--
protected static class ViewHolder extends RecyclerView.ViewHolder {
ImageView hImage;
TextView imageUID, hDescription;
View head, body;
Floaty floaty;
TextView hDescroptionInFloaty;
ImageView hImageInFloaty;
Notification notification;
Button btn_accept;
ProgressBar progressBar, progressBar2;
AppCompatButton btnCloseFloaty;
private static final int NOTIFICATION_ID = 1500;
public ViewHolder(final View itemView) {
super(itemView);
Intent intent = new Intent(itemView.getContext(), HelpRequest.class);
PendingIntent resultPendingIntent = PendingIntent.getActivity(itemView.getContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
notification = Floaty.createNotification(itemView.getContext(), "HumaneHelper", "Floaty has started with homeless's pic and description", R.mipmap.ic_launcher, resultPendingIntent);
head = LayoutInflater.from(itemView.getContext()).inflate(R.layout.widget_chathead, null);
// You should not add click listeners to head as it will be overridden, but the purpose of not making head just
// an ImageView is so you can add multiple views in it, and show and hide the relevant views to notify user etc.
body = LayoutInflater.from(itemView.getContext()).inflate(R.layout.content_help_request_chat_head, null);
floaty = Floaty.createInstance(itemView.getContext(), head, body, NOTIFICATION_ID, notification);
btnCloseFloaty = (AppCompatButton) body.findViewById(R.id.btn_close_floaty);
btnCloseFloaty.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
floaty.stopService();
}
});
hDescroptionInFloaty = (TextView) body.findViewById(R.id.hDescriptionHF);
hImageInFloaty = (ImageView) body.findViewById(R.id.hImageHF);
}
这里是bindView()
:
@Override
public void bindView(final ViewHolder holder) {
super.bindView(holder);
holder.imageUID.setText(imageUIDh);
holder.hDescription.setText(hDescription);
if (imageUIDh != null) {
holder.progressBar2 = (ProgressBar) holder.body.findViewById(R.id.progressBar_loading_image_ch);
holder.btn_accept = (Button) holder.itemView.findViewById(R.id.btn_accept);
View.OnClickListener() {
@Override
public void onClick(View view) {
if (holder.isNetworkAvailable()) {
holder.hDescroptionInFloaty.setText(holder.hDescription.getText().toString());
Picasso.with(holder.itemView.getContext())
.load(imageUIDh)
.error(R.drawable.ic_warning_black_24dp)
.into(holder.hImageInFloaty, new Callback() {
@Override
public void onSuccess() {
holder.progressBar2.setVisibility(View.GONE);
}
@Override
public void onError() {
// TODO Auto-generated method stub
}
});
Toast.makeText(holder.itemView.getContext(), "updated: " + holder.homelessDescroptionInFloaty.getText(), Toast.LENGTH_LONG).show();
AlertDialog.Builder builder = new AlertDialog.Builder(holder.itemView.getContext());
builder.setMessage(R.string.request_accepted_txt);
builder.setPositiveButton("Navigate me", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
holder.floaty = Floaty.createInstance(holder.itemView.getContext(), holder.head, holder.body, holder.NOTIFICATION_ID, holder.notification);
holder.floaty.startService();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(holder.itemView.getContext(), "The help-request has been rejected.", Toast.LENGTH_LONG).show();
}
});
AlertDialog dialog = builder.create();
dialog.show();
} else {
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(holder.itemView.getContext());
builder.setTitle("No internet connection!");
builder.setMessage("We need internet connection to navigate you more accurately. Please connect to the internet and then accept the help-request.");
builder.setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent intent = new Intent(Settings.ACTION_SETTINGS);
holder.itemView.getContext().startActivity(intent);
}
});
builder.setNegativeButton("Cancel", null);
builder.show();
}
}
});
} else {
Toast.makeText(holder.itemView.getContext(), "some problem", Toast.LENGTH_SHORT).show();
}
}
这里发生了什么问题?如何将点击其按钮的卡片中的文字和图片放入 float 中?
最佳答案
如果您看一下 Floaty 代码 here .您会注意到它使用了 SingletonPattern。因此,这就是它第一次工作但之后显示不正确数据的原因。一种解决方案是扩展 Floaty 类,并添加您自己的 createInstance
方法。方法的主体是这样的:
public static synchronized Floaty createInstance(Context context, View head, View body, int notificationId, Notification notification, FloatyOrientationListener
floatyOrientationListener) {
if (floaty == null) {
floaty = new Floaty(context, head, body, notificationId, notification, floatyOrientationListener);
}else {
floaty.stopService();
floaty = null;
floaty = new Floaty(context, head, body, notificationId, notification, floatyOrientationListener);
}
return floaty;
}
我希望这能奏效。
方法二
想到的另一种更简单的方法是,只初始化 Floaty 一次。然后只需引用您的 holder 中的 body 并修改 holder 中的 ImageView 和 TextView。
关于android - 单击按钮后如何从 float 的相应 recyclerview 项目中获取相应的文本和图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38023880/
表架构 DROP TABLE bla; CREATE TABLE bla (id INTEGER, city INTEGER, year_ INTEGER, month_ INTEGER, val I
我需要拆分字符串/或从具有以下结构的字符串中获取更容易的子字符串。 字符串将来自 window.location.pathname 或 window.location.href,看起来像 text/n
每当将对象添加到数组中时,我都会尝试更新 TextView ,并在 TextView 中显示该文本,如下所示: "object 1" "object 2" 问题是,每次将新对象添加到数组时,它都会覆盖
我目前正在寻找使用 Java 读取网站可见文本并将其存储为纯文本字符串的方法。 换句话说,我想转换成这样: Hello stupid World进入“ Hello World ” 或者类似的东西 Un
我正在尝试以文本和 HTML 格式发送电子邮件,但无法正确发送正确的 header 。特别是,我想设置 Content-Type header ,但我找不到如何为 html 和文本部分单独设置它。 这
我尝试了上面的代码,但我无法绑定(bind)文本,我怎样才能将资源内部文本 bloc
我刚刚完成了 Space Shooter 教程,由于没有 GUIText 对象,所以我创建了 UI.Text 对象并进行了相应的编码。它在统一播放器中有效,但在构建 Web 应用程序后无效。我花了一段
我有这个代码: - (IBAction)setButtonPressed:(id)sender { NSUserDefaults *sharedDefaults = [[NSUserDefau
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我在将 Twitter 嵌入到我从 HTML 5 转换的 wordpress 运行网站时遇到问题。 我遇到的问题是推文不是我的自定义字体... 这是我无法使用任何 css 定位的 HTML 代码,我正
我正在尝试找到解决由于使用以下形式的代码而导致的冗余字符串连接问题的最佳方法: logger.debug("Entering loop, arg is: " + arg) // @1 在大多数情况下,
我写了这个测试 @Test public void removeRequestTextFromRouteError() throws Exception { String input = "F
我目前正在创建一个正则表达式来拆分所有匹配以下格式的字符串:&[文本],并且需要获取文本。字符串可能类似于:something &[text] &[text] everything &[text] 等
有没有办法将标题文本从一个词变形为另一个词,同时保留两个词中使用的字母?我看过的许多 css 文本动画大多是视觉的,很少有旋转整个单词的。 我想要做的是从一个词过渡,例如“BEACH”到“CHANGE
总结matplotlib绘图如何设置坐标轴刻度大小和刻度。 上代码: ?
我在容器 (1) 中创建了容器 (2)。你能帮忙如何向容器(1)添加文本吗?下面是我的代码 return Scaffold( body: Padding( padding: c
我似乎找不到任何人或任何人这样做过。我试图限制我们使用的图像数量,并想创建一个带有渐变作为其“颜色”的文本,并在其周围设置渐变轮廓/描边 到目前为止,我还没有看到任何将两者结合在一起的东西。 我可以自
我正在为视频游戏暗黑破坏神 2 使用 discord.py 构建一个不和谐机器人。其中一项功能要求机器人从暗黑破坏神 2 屏幕截图中提取项目的名称和属性。我目前正在为此使用 pytesseract,但
我很难弄清楚如何旋转 strip.text theme 中的属性来自 ggplot2 .我使用的是 R 版本 3.4.2 和 ggplot2 版本 2.2.1。 以下是 MWE 的数据。 > dput
我是一名优秀的程序员,十分优秀!