- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个似乎无法解决的问题。不知道以前有没有人问过这个问题,我可能错过了。
概述:我目前在一家公司担任实习生 android 开发人员(android 经验 +/- 3 个月)。我有一个测试项目要做适合我学习安卓。测试项目是关于一个新闻站点/应用程序的,您可以从 JSON 中获取文章,当点击一篇文章时,您会在另一个 fragment 中获得完整的文章。在完整文章中,您可以将文章保存为收藏夹(存储在 sqlite 数据库中)。另一个 fragment 从数据库中获取收藏夹并将其显示在具有 1 个 ImageView 、3 个 TextView 和 1 个图像按钮的 ListView 中。
问题:当我到达收藏夹 fragment (显示它)时:
下面是我的 ListView 布局 xml、 fragment 布局 xml 和我的类文件。
ListView 布局 xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="1dp"
android:descendantFocusability="blocksDescendants" >
<ImageView
android:id="@+id/iv_thumb"
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_centerVertical="true"
android:padding="10dp"
android:contentDescription="@string/str_iv_thumb" />
<TextView
android:id="@+id/tv_article_title"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:textSize="15sp"
android:textStyle="bold"
android:layout_marginTop="8dp"
android:layout_centerHorizontal="true"
android:layout_toRightOf="@id/iv_thumb" />
<TextView
android:id="@+id/tv_article_date"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_toRightOf="@id/iv_thumb"
android:layout_below="@id/tv_article_title" />
<TextView
android:id="@+id/tv_article_synopsis"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_toRightOf="@id/iv_thumb"
android:layout_below="@id/tv_article_date" />
<ImageButton
style="@style/Rem_Fav"
android:id="@+id/iv_rem_favs_single"
android:src="@drawable/remove_favourite"
android:layout_width="25dp"
android:layout_height="25dp"
android:clickable="true"
android:layout_marginTop="8dp"
android:layout_marginRight="5dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:contentDescription="@string/rem_favs_single"
android:layout_toRightOf="@+id/tv_article_synopsis" />
fragment 布局 xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/background" >
<ImageView
android:id="@+id/iv_logo"
android:contentDescription="@string/content"
android:layout_width="250dp"
android:layout_height="36dp"
android:layout_centerHorizontal="true"
android:src="@drawable/logo" />
<ImageButton
style="@style/Rem_Fav"
android:id="@+id/iv_rem_favs"
android:src="@drawable/remove_favourite"
android:clickable="true"
android:layout_width="25dp"
android:layout_marginRight="1dp"
android:layout_marginTop="10dp"
android:layout_alignParentRight="true"
android:contentDescription="@string/rem_favs"
android:layout_toRightOf="@id/iv_logo" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/relativeLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_below="@id/relativeLayout1"
style="@style/background" >
<ListView
android:id="@+id/lv_Entities"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:clickable="true"
tools:context=".MainActivity" />
</RelativeLayout>
</LinearLayout>
类文件:
package com.example.***;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import com.example.***.sqlite.SqliteController;
import com.example.***.R;
import android.annotation.SuppressLint;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
public class FavouritesFragment extends Fragment {
// Listview attribute
ListView mListView;
List<HashMap<String, String>> articles = null;
SqliteController controller;
SQLiteDatabase db;
ImageButton allRemoveBtn;
CustomListAdapter adapter;
public FavouritesFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
controller = new SqliteController(getActivity());
db = controller.getWritableDatabase();
View rootView = inflater.inflate(R.layout.fragment_favourites, container, false);
// Setting the Title of the List
getActivity().getActionBar().setTitle("Favourites");
// Getting the articles from the DB
articles = controller.getAllArticles();
// Getting a reference to ListView of activity_main
mListView = (ListView) rootView.findViewById(R.id.lv_Entities);
adapter = new CustomListAdapter(getActivity(), R.layout.lv_fav_layout);
mListView.setAdapter(adapter);
// Log.d("LISTVIEW","mListView: " + mListView);
/**
* This section is for the Remove All from Favourites function
* with a pop-up window asking if the user is sure about his/her
* choice. If the yes button is clicked, all of the saved favourites
* is deleted and the image chaged to selected image.
*/
if (articles.isEmpty()) {
// Do not show the Delete all image button
allRemoveBtn = (ImageButton) rootView.findViewById(R.id.iv_rem_favs);
allRemoveBtn.setVisibility(View.INVISIBLE);
}
else
{
allRemoveBtn = (ImageButton) rootView.findViewById(R.id.iv_rem_favs);
allRemoveBtn.setOnClickListener(new OnClickListener() {
@SuppressLint("InflateParams")
@Override
public void onClick(View arg0) {
LayoutInflater layoutInflater = (LayoutInflater) getActivity().getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.popup, null);
final PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);
Button btnNo = (Button) popupView.findViewById(R.id.btn_no);
btnNo.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// Close the pop-up window
popupWindow.dismiss();
}
});
Button btnYes = (Button) popupView.findViewById(R.id.btn_yes);
btnYes.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// Delete All from Table
controller.deleteAllArticle(db, "Favourites");
// Close the pop-up window
popupWindow.dismiss();
// Reload current fragment
articles = controller.getAllArticles();
adapter.notifyDataSetChanged();
// Hide the Image Button
allRemoveBtn.setVisibility(View.INVISIBLE);
}
});
popupWindow.showAsDropDown(allRemoveBtn, 50, -30);
}
});
}
return rootView;
}
public class CustomListAdapter extends ArrayAdapter<HashMap<String, String>>
{
Context context;
public CustomListAdapter(Context context, int resourceId)
{
super(context, resourceId);
this.context = context;
}
@Override
public int getCount() {
return articles.size();
}
@Override
public long getItemId(int position) {
return position;
}
@SuppressWarnings("unused")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder view_holder;
final HashMap<String, String> rowItem = articles.get(position);
if (row == null)
{
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.lv_fav_layout, null);
view_holder = new ViewHolder();
view_holder.iv_thumb = (ImageView) row.findViewById(R.id.iv_thumb);
view_holder.tv_article_title = (TextView) row.findViewById(R.id.tv_article_title);
view_holder.tv_article_date = (TextView) row.findViewById(R.id.tv_article_date);
view_holder.tv_article_synopsis = (TextView) row.findViewById(R.id.tv_article_synopsis);
view_holder.iv_rem_favs_single =(ImageButton)row.findViewById(R.id.iv_rem_favs_single);
row.setTag(view_holder);
}
else
{
view_holder = (ViewHolder) row.getTag();
view_holder.iv_thumb.setImageBitmap(null);
}
row.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
selectItem(position);
}
});
// Getting the Article ID of selected item
final String articleId = articles.get(position).get("ArticleId");
// Setting of the Image
String imgUrl = articles.get(position).get("ArticleUrl");
new DownloadImageTask(view_holder.iv_thumb).execute(imgUrl);
// Setting the Title
view_holder.tv_article_title.setText(articles.get(position).get("ArticleTitle"));
// Setting the Date
view_holder.tv_article_date.setText(articles.get(position).get("ArticleDate"));
// Setting the Synopsis of the article
view_holder.tv_article_synopsis.setText(articles.get(position).get("ArticleSynopsis"));
// Set the onclick listener for the remove favourite item
view_holder.iv_rem_favs_single.setTag(view_holder.iv_rem_favs_single);
view_holder.iv_rem_favs_single.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View arg0) {
LayoutInflater layoutInflater = (LayoutInflater) getActivity().getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.popup, null);
final PopupWindow popupWindow2 = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
popupWindow2.showAtLocation(popupView, Gravity.CENTER, 0, 0);
Button btnNo = (Button) popupView.findViewById(R.id.btn_no);
btnNo.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// DO NOT DELETE ANYTHING
// Close the pop-up window
popupWindow2.dismiss();
}
});
Button btnYes = (Button) popupView.findViewById(R.id.btn_yes);
btnYes.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// Delete selected item from the Table
controller.deleteArticle(articleId);
// Close the pop-up window
popupWindow2.dismiss();
// Reload current fragment
articles = controller.getAllArticles();
adapter.notifyDataSetChanged();
// Set the Image of the Image Button to selected
//((ImageButton) arg0.getTag()).setImageResource(R.drawable.remove_favourite_selected);
if (articles.isEmpty()) {
// Do not show the Delete all image button
allRemoveBtn.setVisibility(View.INVISIBLE);
}
}
});
popupWindow2.showAsDropDown((ImageButton) arg0.getTag(), 50, -30);
}
});
return row;
}
private class ViewHolder{
ImageView iv_thumb;
TextView tv_article_title;
TextView tv_article_date;
TextView tv_article_synopsis;
ImageButton iv_rem_favs_single;
}
}
// If the listview item is selected, it loads the next fragment
private void selectItem(int position) {
Log.d("POSITION","Position: " + position);
// update the main content by replacing fragmentss
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
FullArticleFragment fragment = new FullArticleFragment();
fragment.article = articles.get(position);
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack so the user can navigate back
transaction.replace(R.id.fragment_container, fragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
}
// Download the image from the url stored in the database
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
@Override
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
InputStream in = null;
try {
in = new java.net.URL(urldisplay).openStream();
// Log.d("IMAGEURL","DIT - Url: " + urldisplay);
mIcon11 = BitmapFactory.decodeStream(in);
in.close();
}
catch (Exception e)
{
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
@Override
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
}
谁能帮我解决这个问题。
最佳答案
您没有检查图像是否在同一位置。尝试这样的事情:
// Download the image from the url stored in the database
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
int position;
public DownloadImageTask(ImageView bmImage, int position) {
this.bmImage = bmImage;
this.position = position;
ivPic.setTag(position);
bmImage.setImageBitmap(null);
}
@Override
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
InputStream in = null;
try {
in = new java.net.URL(urldisplay).openStream();
// Log.d("IMAGEURL","DIT - Url: " + urldisplay);
mIcon11 = BitmapFactory.decodeStream(in);
in.close();
}
catch (Exception e)
{
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if(result != null && ((Integer)getTag) == this.position)
bmImage.setImageBitmap(result);
}
}
关于android - 在 Listview 第一行中下载的图像在正确显示 android 之前随机播放所有图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25914370/
这个问题已经有答案了: How to do case insensitive string comparison? (23 个回答) 已关闭 3 年前。 用户在我的输入栏中写入“足球”,然后执行第 6
啊,不习惯 javascript 中的字符串。 character_id= + id + correct= + correctOrIncorrect 这就是我需要制作成字符串的内容。如果您无法猜测字符
$(function() { var base_price = 0; CalculatePrice(); $(".math1").on('change', function(e) { Calc
我找不到任何文章回答问题:将Spinnaker部署到Spinnaker将管理的同一Kubernetes集群是否安全/正确?我主要是指生产,HA部署。 最佳答案 我认为Spinnaker和Kuberne
我正在使用MSVC在Windows上从源代码(官方源代码发布,而不是从仓库中)构建Qt5(Qt 5.15.0)。 我正在设置环境。变量,依赖项等,然后运行具有1600万个选项的configure,最后
我需要打印一个包含重复单词的数组。我的数组已经可以工作,但我不知道如何正确计算单词数。我已经知道,当我的索引计数器 (i) 为 49 时,并且当 (i) 想要计数到 50 时,我会收到错误,但我不知道
我正在遵循一个指南,该指南允许 Google map 屏幕根据屏幕尺寸禁用滚动。我唯一挣扎的部分是编写一个代码,当我手动调整屏幕大小时动态更改 True/False 值。 这是我按照说明操作的网站,但
我有一个类“FileButton”。它的目的是将文件链接到 JButton,FileButton 继承自 JButton。子类继承自此以使用链接到按钮的文件做有用的事情。 JingleCardButt
我的 friend 数组只返回一个数字而不是所有数字。 ($myfriends = 3) 应该是…… ($myfriends = 3 5 7 8 9 12). 如果我让它进入 while 循环……整个
这个问题在这里已经有了答案: Is there a workaround to make CSS classes with names that start with numbers valid?
我正在制作一个 JavaScript 函数,当调整窗口大小时,它会自动将 div 的大小调整为与窗口相同的宽度/高度。 该功能非常基本,但我注意到在调整窗口大小时出现明显的“绘制”滞后。在 JS fi
此问题的基本视觉效果可在 http://sevenx.de/demo/bootstrap-carousel/inc.carousel/tabbed-slider.html 获得。 - 如果你想看一看。
我明白,如果我想从函数返回一个字符串文字或一个数组,我应该将其声明为静态的,这样当被调用的函数被返回时,内容就不会“消亡”。 但我的问题是,当我在函数内部使用 malloc 分配内存时会怎样? 在下面
在 mySQL 数据库中存储 true/false/1/0 值最合适(读取数据消耗最少)的数据字段是什么? 我以前使用过一个字符长的 tinyint,但我不确定它是否是最佳解决方案? 谢谢! 最佳答案
我想一次读取并处理CSV文件第一行中的条目(例如打印)。我假设使用Unix风格的\n换行符,没有条目长度超过255个字符,并且(现在)在EOF之前有一个换行符。这意味着它是fgets()后跟strto
所以,我们都知道 -1 > 2u == true 的 C/C++ 有符号/无符号比较规则,并且我有一种情况,我想有效地实现“正确”比较。 我的问题是,考虑到人们熟悉的尽可能多的架构,哪种方法更有效。显
**摘要:**文章的标题看似自相矛盾。 本文分享自华为云社区《Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序》,作者: Jerry Wang 。 文章的标题看似自相矛盾,然而我在“正
我有一个数据框,看起来像: dataDemo % mutate_each(funs(ifelse(. == '.', REF, as.character(.))), -POS) # POS REF
有人可以帮助我使用 VBScript 重新格式化/正确格式化带分隔符的文本文件吗? 我有一个文本文件 ^分界如下: AGREE^NAME^ADD1^ADD2^ADD3^ADD4^PCODE^BAL^A
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!