在android中从目录读取项目到listview

发布于 2025-01-07 05:21:13 字数 6993 浏览 3 评论 0原文

我正在制作一个 Android 应用程序,需要将 sd 卡上特定目录中的所有项目显示到列表视图上。我已经阅读了几个教程,但似乎没有一个给我任何帮助。我已经成功地从我的 SD 卡和列表视图中添加和删除内容。但我需要将目录中的项目(文件)显示到列表视图上。我正在使用动态列表视图。请帮助并提前非常感谢!这是我到目前为止使用的代码,我需要阅读 onCreate 方法上的项目。

public class NotesActivity extends ListActivity implements OnClickListener {
/** Called when the activity is first created. */
List<String> myList = new ArrayList<String>();
EditText AddItemToListViewEditText;
Button AddItemToListView, AddItemToListViewButton, CancelButton, DeleteButton,CancelButton2, DeleteAllButton;
LinearLayout AddItemToListViewLinearLayout, DeleteItemFromListViewLinearLayout, DeleteAllItemsFromListViewLinearLayout;
public int DeleteIndexNumber;
public String NameOfSaveItemToSdCard = "";
public String NameOfDeleteItemFromSdCard = "";
public int DeleteIndexNumber2;
  static final String[] COUNTRIES = new String[] {
      "Matte på A1 med Ole", "Engelsk på klasserommet", "Film på A1 etter friminuttet"
      };
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.notes);
    setListAdapter((ListAdapter) new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));
    setListAdapter((ListAdapter) new ArrayAdapter<String>(this, R.layout.list_item, myList));

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    lv.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
        // When clicked, show a toast with the TextView text
        Toast.makeText(getApplicationContext(), "Note: " + ((TextView) view).getText(),
            Toast.LENGTH_SHORT).show();
        DeleteIndexNumber = position;
        DeleteIndexNumber2 = position;
        NameOfDeleteItemFromSdCard = myList.get(position);
        DeleteItemFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteItemFromListViewLinearLayout);
        DeleteItemFromListViewLinearLayout.setVisibility(View.VISIBLE);
  }
    });
  }
@Override
public boolean onCreateOptionsMenu(Menu meny) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.listviewmenubuttons, meny);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
    case R.id.AddItemToListView:
        AddItemToListViewButton = (Button)findViewById(R.id.AddItemToListViewButton);
        CancelButton = (Button)findViewById(R.id.CancelButton);
        DeleteButton = (Button)findViewById(R.id.DeleteButton);
        CancelButton.setOnClickListener(this);
        DeleteButton.setOnClickListener(this);
        AddItemToListViewLinearLayout = (LinearLayout)findViewById(R.id.AddItemToListViewLinearLayout);
        AddItemToListViewButton.setOnClickListener(this);
        AddItemToListViewLinearLayout.setVisibility(View.VISIBLE);
        break;
    case R.id.DeleteAllNotes:
        DeleteAllItemsFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteAllItemsFromListViewLinearLayout);
        DeleteAllItemsFromListViewLinearLayout.setVisibility(View.VISIBLE);
        CancelButton2 = (Button)findViewById(R.id.CancelButton2);
        DeleteAllButton = (Button)findViewById(R.id.DeleteAllButton);
        CancelButton2.setOnClickListener(this);
        DeleteAllButton.setOnClickListener(this);
        break;
        }
    return true;
}
public void onClick(View src) {
    switch(src.getId()) {
    case R.id.AddItemToListViewButton:
        AddItemToListViewEditText = (EditText)findViewById(R.id.AddItemToListViewEditText);
        myList.add(AddItemToListViewEditText.getText().toString());
        NameOfSaveItemToSdCard = AddItemToListViewEditText.getText().toString();
        ((ArrayAdapter)getListView().getAdapter()).notifyDataSetChanged(); 
        AddItemToListViewEditText.setText("");
        AddItemToListViewEditText.clearFocus();
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.RESULT_HIDDEN);
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        AddItemToListViewLinearLayout.setVisibility(View.GONE);
        //Check if directory exists
        checkIfDirectoryExist();
        break;
    case R.id.CancelButton:
        DeleteItemFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteItemFromListViewLinearLayout);
        DeleteItemFromListViewLinearLayout.setVisibility(View.INVISIBLE);
        break;
    case R.id.DeleteButton:
        myList.remove(DeleteIndexNumber);
        ((ArrayAdapter)getListView().getAdapter()).notifyDataSetChanged();
        File f = new File(Environment.getExternalStorageDirectory() + "/SchoolAppNotes/" + NameOfDeleteItemFromSdCard);
        if(f.exists()) {
            boolean deleted = f.delete();
        }
        DeleteItemFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteItemFromListViewLinearLayout);
        DeleteItemFromListViewLinearLayout.setVisibility(View.INVISIBLE);
        break;
    case R.id.DeleteAllButton:
        myList.removeAll(myList);
        ((ArrayAdapter)getListView().getAdapter()).notifyDataSetChanged();
        DeleteAllItemsFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteAllItemsFromListViewLinearLayout);
        DeleteAllItemsFromListViewLinearLayout.setVisibility(View.INVISIBLE);
        break;
    case R.id.CancelButton2:
        DeleteAllItemsFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteAllItemsFromListViewLinearLayout);
        DeleteAllItemsFromListViewLinearLayout.setVisibility(View.INVISIBLE);
        break;
    }
}
private void checkIfDirectoryExist() {
    // TODO Auto-generated method stub
    File f = new File(Environment.getExternalStorageDirectory() + "/SchoolAppNotes");
    if(f.exists()) {
        try {
            OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory()
                     + "/SchoolAppNotes/" + NameOfSaveItemToSdCard);
            Toast.makeText(getApplicationContext(), "File created:-)",
                    Toast.LENGTH_SHORT).show();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            Toast.makeText(getApplicationContext(), "We failed to create the file",
                    Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }
    else {
        //Create directory
        File folder = new File(Environment.getExternalStorageDirectory() + "/SchoolAppNotes");
        boolean success = false;
        if(!folder.exists())
        {
            success = folder.mkdir();
        }         
        if (!success) 
        { 
            // Do something on success
//Writing file...(It doesn't work)
        }
        else 
        {
            // Do something else on failure 
        }
        checkIfDirectoryExist();
    }
}
}

I am making an android application that needs to display all of the items in a specific directory on the sd-card onto a listview. I have gone though several tutorials but none seemed to give me any help. I have managed to add and delete things from my sd card and listview. But i need to show the items(files) from a directory onto the listview. I am using a dynamic listview. Please help and thanks SO much in advance! This is the code that i am using so far and i need to read the items on the onCreate method.

public class NotesActivity extends ListActivity implements OnClickListener {
/** Called when the activity is first created. */
List<String> myList = new ArrayList<String>();
EditText AddItemToListViewEditText;
Button AddItemToListView, AddItemToListViewButton, CancelButton, DeleteButton,CancelButton2, DeleteAllButton;
LinearLayout AddItemToListViewLinearLayout, DeleteItemFromListViewLinearLayout, DeleteAllItemsFromListViewLinearLayout;
public int DeleteIndexNumber;
public String NameOfSaveItemToSdCard = "";
public String NameOfDeleteItemFromSdCard = "";
public int DeleteIndexNumber2;
  static final String[] COUNTRIES = new String[] {
      "Matte på A1 med Ole", "Engelsk på klasserommet", "Film på A1 etter friminuttet"
      };
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.notes);
    setListAdapter((ListAdapter) new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));
    setListAdapter((ListAdapter) new ArrayAdapter<String>(this, R.layout.list_item, myList));

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    lv.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
        // When clicked, show a toast with the TextView text
        Toast.makeText(getApplicationContext(), "Note: " + ((TextView) view).getText(),
            Toast.LENGTH_SHORT).show();
        DeleteIndexNumber = position;
        DeleteIndexNumber2 = position;
        NameOfDeleteItemFromSdCard = myList.get(position);
        DeleteItemFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteItemFromListViewLinearLayout);
        DeleteItemFromListViewLinearLayout.setVisibility(View.VISIBLE);
  }
    });
  }
@Override
public boolean onCreateOptionsMenu(Menu meny) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.listviewmenubuttons, meny);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
    case R.id.AddItemToListView:
        AddItemToListViewButton = (Button)findViewById(R.id.AddItemToListViewButton);
        CancelButton = (Button)findViewById(R.id.CancelButton);
        DeleteButton = (Button)findViewById(R.id.DeleteButton);
        CancelButton.setOnClickListener(this);
        DeleteButton.setOnClickListener(this);
        AddItemToListViewLinearLayout = (LinearLayout)findViewById(R.id.AddItemToListViewLinearLayout);
        AddItemToListViewButton.setOnClickListener(this);
        AddItemToListViewLinearLayout.setVisibility(View.VISIBLE);
        break;
    case R.id.DeleteAllNotes:
        DeleteAllItemsFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteAllItemsFromListViewLinearLayout);
        DeleteAllItemsFromListViewLinearLayout.setVisibility(View.VISIBLE);
        CancelButton2 = (Button)findViewById(R.id.CancelButton2);
        DeleteAllButton = (Button)findViewById(R.id.DeleteAllButton);
        CancelButton2.setOnClickListener(this);
        DeleteAllButton.setOnClickListener(this);
        break;
        }
    return true;
}
public void onClick(View src) {
    switch(src.getId()) {
    case R.id.AddItemToListViewButton:
        AddItemToListViewEditText = (EditText)findViewById(R.id.AddItemToListViewEditText);
        myList.add(AddItemToListViewEditText.getText().toString());
        NameOfSaveItemToSdCard = AddItemToListViewEditText.getText().toString();
        ((ArrayAdapter)getListView().getAdapter()).notifyDataSetChanged(); 
        AddItemToListViewEditText.setText("");
        AddItemToListViewEditText.clearFocus();
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.RESULT_HIDDEN);
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        AddItemToListViewLinearLayout.setVisibility(View.GONE);
        //Check if directory exists
        checkIfDirectoryExist();
        break;
    case R.id.CancelButton:
        DeleteItemFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteItemFromListViewLinearLayout);
        DeleteItemFromListViewLinearLayout.setVisibility(View.INVISIBLE);
        break;
    case R.id.DeleteButton:
        myList.remove(DeleteIndexNumber);
        ((ArrayAdapter)getListView().getAdapter()).notifyDataSetChanged();
        File f = new File(Environment.getExternalStorageDirectory() + "/SchoolAppNotes/" + NameOfDeleteItemFromSdCard);
        if(f.exists()) {
            boolean deleted = f.delete();
        }
        DeleteItemFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteItemFromListViewLinearLayout);
        DeleteItemFromListViewLinearLayout.setVisibility(View.INVISIBLE);
        break;
    case R.id.DeleteAllButton:
        myList.removeAll(myList);
        ((ArrayAdapter)getListView().getAdapter()).notifyDataSetChanged();
        DeleteAllItemsFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteAllItemsFromListViewLinearLayout);
        DeleteAllItemsFromListViewLinearLayout.setVisibility(View.INVISIBLE);
        break;
    case R.id.CancelButton2:
        DeleteAllItemsFromListViewLinearLayout = (LinearLayout)findViewById(R.id.DeleteAllItemsFromListViewLinearLayout);
        DeleteAllItemsFromListViewLinearLayout.setVisibility(View.INVISIBLE);
        break;
    }
}
private void checkIfDirectoryExist() {
    // TODO Auto-generated method stub
    File f = new File(Environment.getExternalStorageDirectory() + "/SchoolAppNotes");
    if(f.exists()) {
        try {
            OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory()
                     + "/SchoolAppNotes/" + NameOfSaveItemToSdCard);
            Toast.makeText(getApplicationContext(), "File created:-)",
                    Toast.LENGTH_SHORT).show();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            Toast.makeText(getApplicationContext(), "We failed to create the file",
                    Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }
    else {
        //Create directory
        File folder = new File(Environment.getExternalStorageDirectory() + "/SchoolAppNotes");
        boolean success = false;
        if(!folder.exists())
        {
            success = folder.mkdir();
        }         
        if (!success) 
        { 
            // Do something on success
//Writing file...(It doesn't work)
        }
        else 
        {
            // Do something else on failure 
        }
        checkIfDirectoryExist();
    }
}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北座城市 2025-01-14 05:21:13

我认为 myList 应该保存您目录中的文件名?看来您从未实例化过它。

为此,您需要获取文件名列表并将其加载到那里,然后再使用它来制作适配器。

因此,在 .setAdapter() 调用之前添加类似的内容:

File mFile = new File(Environment.getExternalStorageDirectory() + "yourDirectory");
myList = mFile.list();

如果正确填充了您的数组,您应该很高兴。

ps File.list() 文档

编辑:

哎呀,没有注意到 myList 上的类型。用这个代替

myList = Arrays.asList(mFile.list());

I assume that myList is supposed to be holding the file names from your directory? It looks like you never instantiated it.

To do that you'll need to get a list of your file names and load it in to there before you use it to make an adapter.

So add something like this before your .setAdapter() calls:

File mFile = new File(Environment.getExternalStorageDirectory() + "yourDirectory");
myList = mFile.list();

You should be good to go if that fills your array correctly.

p.s. File.list() docs

EDIT:

Whoops, didn't notice the type on myList. Use this instead

myList = Arrays.asList(mFile.list());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文