如何实现setOnItemLongClickListener(),在列表视图中选择一个文件夹?

时间:2016-08-02 16:51:07

标签: java android listview android-arrayadapter

我正在使用setonItemClickListener()来选择文件(并在edittext中获取其路径)(意味着工作)。

当我长时间触摸文件夹以获取其路径时,我正在努力实施setOnItem LongClickListener ()以选择文件夹

在我使用所选文件的getparent()之前,当选择文件夹单选按钮时,采用父文件夹路径获取edittext中的文件夹路径。

问题:如何实现setOnItemLongClickListener(),在列表视图中选择文件夹?

是否可以为文件夹提供setonItemLongClickListener()文件以及setonItemClickListener()用于文件或创建文件夹的所有代码文件,对于文件?

感谢所有答案。

已经用于获取文件的代码文件和文件夹路径(通过执行文件的getparent())是:

MainFragment.java

    String curFileName;
    String filePath;
    EditText edittext;
    String AppendedForFullPath;

 edittext = (EditText) view.findViewById(R.id.editText);  //Done for File Exploring, EditText, Browse Button.

        Button b1 = (Button) view.findViewById(R.id.skipButton);   //Browse button
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent1 = new Intent(v.getContext(), FileChooser.class);
                startActivityForResult(intent1, REQUEST_PATH);
            }
        });

     public void onActivityResult(int requestCode, int resultCode, Intent data) {
        // See which child activity is calling us back.
        if (requestCode == REQUEST_PATH) {
            if (resultCode == Activity.RESULT_OK) {
                curFileName = data.getStringExtra("GetFileName");
                filePath = data.getStringExtra("GetPath");
                AppendedForFullPath = filePath + "/" + curFileName;
                edittext.setText(AppendedForFullPath);



                /*File file = new File(filePath);
                File parentDir = file.getParentFile(); // to get the parent dir
                String parentDirName = file.getParent(); // to get the parent dir name
                edittext.setText(parentDirName);*/
            }
        }
    }


    private List<File> getListFiles(File parentDir) {   //Used in algorithms to traverse files and subfolders.
        ArrayList<File> inFiles = new ArrayList<File>();
        File[] files = parentDir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                //Toast.makeText(getActivity().getApplicationContext(), "Hello, I am a folder.", Toast.LENGTH_SHORT).show();
                inFiles.addAll(getListFiles(file));
            } else {
                if (file.isFile()) {
                    //Toast.makeText(getActivity().getApplicationContext(), "Hello, I am a file", Toast.LENGTH_SHORT).show();
                    inFiles.add(file);
                }
            }
        }
        return inFiles;
    }

FileChooser.java

/**
 * Created by hp on 01-06-2016.
 */

import java.io.File;
import java.sql.Date;
import java.util.ArrayList; 
import java.util.Collections;
import java.util.List;
import java.text.DateFormat;
import android.os.Bundle;
import android.app.ListActivity;
import android.content.Intent; 
import android.view.View;
import android.widget.ListView; 

public class FileChooser extends ListActivity {

    private File currentDir;
    private FileArrayAdapter adapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        currentDir=new File("/sdcard/");
        fill(currentDir); 
    }
    private void fill(File f)
    {
        File[]dirs=f.listFiles();
        this.setTitle("Current Dir: "+f.getName());
        List<Item>dir=new ArrayList<Item>();
        List<Item>fls=new ArrayList<Item>();
        try{
             for(File ff: dirs)
             { 
                Date lastModDate=new Date(ff.lastModified());
                DateFormat formater=DateFormat.getDateTimeInstance();
                String date_modify=formater.format(lastModDate);
                if(ff.isDirectory()){


                    File[] fbuf=ff.listFiles();
                    int buf=0;
                    if(fbuf != null){ 
                        buf=fbuf.length;
                    } 
                    else
                        buf=0;
                    String num_item=String.valueOf(buf);
                    if(buf == 0)
                        num_item=num_item+" item";
                    else
                        num_item=num_item+" items";

                    //String formated = lastModDate.toString();
                    dir.add(new Item(ff.getName(), num_item, date_modify, ff.getAbsolutePath(), "directory_icon"));
                }
                else
                {
                    fls.add(new Item(ff.getName(), ff.length()+" Byte", date_modify, ff.getAbsolutePath(), "file_icon"));
                }
             }
        }catch(Exception e)
        {

        }
        Collections.sort(dir);
        Collections.sort(fls);
        dir.addAll(fls);
        if(!f.getName().equalsIgnoreCase("sdcard"))
            dir.add(0, new Item("..", "Parent Directory", "", f.getParent(), "directory_up"));
        adapter=new FileArrayAdapter(FileChooser.this, R.layout.file_view, dir);
        this.setListAdapter(adapter);
    }
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id){
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Item o = adapter.getItem(position);
        if(o.getImage().equalsIgnoreCase("directory_icon") || o.getImage().equalsIgnoreCase("directory_up"))
        {
            currentDir=new File(o.getPath());
            fill(currentDir);
        }
        else
        {
            onFileClick(o);
        }
    }
    private void onFileClick(Item o)
    {
        //Toast.makeText(this, "Folder Clicked: "+ currentDir, Toast.LENGTH_SHORT).show();
        Intent intent = new Intent();
        intent.putExtra("GetPath", currentDir.toString());
        intent.putExtra("GetFileName", o.getName());

        setResult(RESULT_OK, intent);
        finish();
    }
}

FileArrayAdapter.java

import java.util.List; 

import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; 
import android.widget.ArrayAdapter;
import android.widget.ImageView; 
import android.widget.TextView;


public class FileArrayAdapter extends ArrayAdapter<Item>{
    private Context c;
    private int id;
    private List<Item>items;

    public FileArrayAdapter(Context context, int textViewResourceId, List<Item> objects) {
        super(context, textViewResourceId, objects);
        c = context;
        id = textViewResourceId;
        items = objects;
    }
    public Item getItem(int i){
         return items.get(i);
    }
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
               View v = convertView;
               if (v == null) {
                   LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                   v = vi.inflate(id, null);
               }

               /* create a new view of my layout and inflate it in the row */
            //convertView = ( RelativeLayout ) inflater.inflate( resource, null );

               final Item o = items.get(position);
               if (o != null) {
                       TextView t1 = (TextView) v.findViewById(R.id.TextView01);
                       TextView t2 = (TextView) v.findViewById(R.id.TextView02);
                       TextView t3 = (TextView) v.findViewById(R.id.TextViewDate);
                       /* Take the ImageView from layout and set the city's image */
                        ImageView imageCity = (ImageView) v.findViewById(R.id.fd_Icon1);
                        String uri = "drawable/" + o.getImage();
                        int imageResource = c.getResources().getIdentifier(uri, null, c.getPackageName());
                        Drawable image = c.getResources().getDrawable(imageResource);
                        imageCity.setImageDrawable(image);

                       if(t1 != null)
                        t1.setText(o.getName());
                       if(t2 != null)
                            t2.setText(o.getData());
                       if(t3 != null)
                            t3.setText(o.getDate());

               }
               return v;
     }
}

Item.java

public class Item implements Comparable<Item>{
    private String name;
    private String data;
    private String date;
    private String path;
    private String image;

    public Item(String n,String d, String dt, String p, String img)
    {
        name = n;
        data = d;
        date = dt;
        path = p; 
        image = img;

    }
    public String getName()
    {
        return name;
    }
    public String getData()
    {
        return data;
    }
    public String getDate()
    {
        return date;
    }
    public String getPath()
    {
        return path;
    }
    public String getImage() {
        return image;
    }

    public int compareTo(Item o) {
        if(this.name != null)
            return this.name.toLowerCase().compareTo(o.getName().toLowerCase()); 
        else 
            throw new IllegalArgumentException();
    }
}

file_view.xml

    <?xml version="1.0" encoding="utf-8"?>
<!--<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

</LinearLayout>-->
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_width="fill_parent">

    <ImageView
        android:id="@+id/fd_Icon1"
        android:layout_width="50dip"
        android:layout_height="50dip"
        />
    <TextView
        android:text="@+id/TextView01"
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textStyle="bold"
        android:layout_toRightOf="@+id/fd_Icon1"
        android:layout_marginTop="5dip"
        android:layout_marginLeft="5dip"
        />
    <TextView
        android:text="@+id/TextView02"
        android:id="@+id/TextView02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/fd_Icon1"
        android:layout_below="@+id/TextView01"
        android:layout_marginLeft="10dip">
    </TextView>
    <TextView
        android:text="@+id/TextViewDate"
        android:id="@+id/TextViewDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/TextView01"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="5dip">
    </TextView>
</RelativeLayout>

0 个答案:

没有答案