如何在ListView中从SD卡显示TextView和ImageView

时间:2015-04-08 09:32:43

标签: android sqlite listview textview imageview

我非常感谢我的查询帮助。 我正在构建的应用程序正在从Web地址(使用JSON)下载文本和图像,并将文本存储在sqlite数据库中,并将图像存储在手机的SD卡中。 然后我想在listView中显示文本和相关图像。 我没有显示文本的问题,但我无法显示imageView。

以下是MainActivity中的代码,它从sqlite数据库中获取文本并填充列表字符串。

@SuppressLint("NewApi") private void displayListView() {
   IgroDatabaseHelper helper = new IgroDatabaseHelper(getBaseContext());
   globalVariable.userLang = helper.userLanguage();
   ArticlesTable = globalVariable.userLang + "Articles";
   numRows = helper.NumEntries(ArticlesTable);
   int i = 1;
   String headText;
   String artID;
   String Date;
   File imgFile;
   List<String> headingArray = new ArrayList<String>(); // array holding the headings to show in TextView
   List<String> artIDArray = new ArrayList<String>(); // array of article IDs used to get the name of the corresponding image
   List<String> imgArray = new ArrayList<String>();    
   File SDCardRoot = Environment.getExternalStorageDirectory().getAbsoluteFile();
   lv = (ListView) findViewById(R.id.list);
   String filename;
while (i <= numRows){ //loop over the number of Articles headings
       headText = helper.getTextFromTable(ArticlesTable, i, "heading");
       artID = helper.getTextFromTable(ArticlesTable, i, "artID");
       image = Environment.getExternalStorageDirectory() + artID + ".png”;
       // getting the image to be shown
       filename= artID + ".png"; 
       imgFile = new File(SDCardRoot,filename);
       Bitmap b = BitmapFactory.decodeFile(imgFile.getAbsolutePath());            
       headingArray.add(headText);
       artIDArray.add(artID);
       imgArray.add(filename);
       i= i + 1;
}           

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
    this,
    R.layout.article_row, R.id.heading, headingArray);
    lv.setAdapter(arrayAdapter); 
 }
}

下面是article_row xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" 
android:background = "#5a9b3e"
android:alpha = "0.7"
>
    <TextView
        android:id="@+id/heading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#FFFFFF"
        android:textStyle="bold"
        android:alpha = "1.0"
        android:layout_marginStart="10sp"
        android:layout_marginLeft="10sp"
        android:layout_weight="5" />

   <ImageView
        android:id="@+id/smallimage"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_weight="1"/>      
 </LinearLayout>

我认为我没有使用正确的数据结构,因为即使显示文本,我也无法合并图像。但我不知道使用什么数据结构来保存文本和图像并在while循环中填充它。

非常感谢任何帮助。

提前感谢你们所有人!

1 个答案:

答案 0 :(得分:0)

您可以直接在服务器上显示图像而不保存它们。但是如果你想做同样的事情,你应该尝试这种方法列出来自SDCard的图像

Loading ListView Image From SDCard