Si8
Si8

Reputation: 9225

Putting together a custom ListView with images and text

MY CustomListViewAdapter class which I took from another example and tried to put it together but I am stuck:

package com.test.testing;

import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomListViewAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;

    public CustomListViewAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.customlist, null);

        TextView fileName = (TextView)vi.findViewById(R.id.tvFileName); // filename
        TextView lastMod = (TextView)vi.findViewById(R.id.tvLastMod); // artist name
        ImageView thumb_image = (ImageView)vi.findViewById(R.id.list_image); // thumb image

        HashMap<String, String> song = new HashMap<String, String>();
        song = data.get(position);

        // Setting all values in listview
        fileName.setText(song.get(PreviousTrip.FilesInFolder)); //set the name for FILENAME?
        lastMod.setText(song.get(PreviousTrip.FileLastModified)); //set the file modified date for FileLastModified?
        thumb_image.setImageResource(R.drawable.ic_launcher); //keep the same image for all files?
        return vi;
    }
}

My PrevTrip class which calls the CustomListViewAdapter class:

public class PreviousTrip extends Fragment {
    ArrayList<String> FilesInFolder, FileLastModified, FileSize;
    File folder;
    ListView lv;
    @Override
    public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {
        final RelativeLayout mFrame3 =  (RelativeLayout) inflater.inflate( R.layout.ptrip, container, false );
        folder = new File(Environment.getExternalStorageDirectory() + "/tc");
        FilesInFolder = GetFiles(folder.getAbsolutePath());
        FileLastModified = GetFileLM(folder.getAbsolutePath());
        lv = (ListView) mFrame3.findViewById(R.id.lvFiles);

        lv.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, FilesInFolder));
    }

    public ArrayList<String> GetFiles(String DirectoryPath) {
    ArrayList<String> MyFiles = new ArrayList<String>();
    File f = new File(DirectoryPath);

    //f.mkdirs();
    File[] files = f.listFiles();
    if (files.length == 0)
        return null;
    else {
        for (int i=0; i<files.length; i++)  {
            if (files[i].getName().endsWith(".tol")) {
                long lastTime = files[i].lastModified();
                String fileName = files[i].getName().substring(0, files[i].getName().lastIndexOf("."));
                MyFiles.add(fileName);
            }
        }
    }

    return MyFiles;
    }

    public ArrayList<String> GetFileLM(String DirectoryPath) {
    ArrayList<String> MyFiles = new ArrayList<String>();
    File f = new File(DirectoryPath);

    //f.mkdirs();
    File[] files = f.listFiles();
    if (files.length == 0)
        return null;
    else {
        for (int i=0; i<files.length; i++)  {
            if (files[i].getName().endsWith(".tol")) {
                long lastTime = files[i].lastModified();
                String dateString = DateFormat.format("MM/dd/yyyy", new Date(lastTime)).toString();
                MyFiles.add(dateString);
            }
        }
    }

    return MyFiles;
    }
}

I am having an issue with these lines as based on my app, it's not making sense:

    HashMap<String, String> song = new HashMap<String, String>();
    song = data.get(position);

    // Setting all values in listview
    fileName.setText(song.get(PreviousTrip.FilesInFolder)); //set the name for FILENAME?
    lastMod.setText(song.get(PreviousTrip.FileLastModified)); //set the file modified date for FileLastModified?
    thumb_image.setImageResource(R.drawable.ic_launcher); //keep the same image for all files?

I am suppose to replace:

lv = (ListView) mFrame3.findViewById(R.id.lvFiles);

lv.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, FilesInFolder));

with this which I understand:

lv=(ListView)findViewById(R.id.lvFiles);
// Getting adapter by passing xml data ArrayList
adapter=new LazyAdapter(this, songsList);        
list.setAdapter(adapter);

But Instead of songsList How do I pass the FilesInFolder and FileLastModified?

Upvotes: 0

Views: 121

Answers (1)

codeMagic
codeMagic

Reputation: 44571

I may be wrong because I'm not sure of the exact problem you are having but I think you want to get a specific String from your ArrayList so you would want something like

fileName.setText(song.get(PreviousTrip.FilesInFolder.get(position)));  // use the position in your Adapter to get that location in your ArrayList
lastMod.setText(song.get(PreviousTrip.FileLastModified.get(position)));

It also looks like the Adapter is currently accepting a HashMap but you have an ArrayList so change its constructor to

 public CustomListViewAdapter(Activity a, ArrayList<String> d) 

Upvotes: 1

Related Questions