2012-02-19 3 views
1

私は、SDカード上の特定のディレクトリにあるすべてのアイテムをリストビューに表示する必要があるアンドロイドアプリケーションを作っています。私はいくつかのチュートリアルを行っていますが、誰も助けてくれないようです。私は追加し、私のSDカードとlistviewから物事を削除する管理しています。しかし、私はディレクトリから項目(ファイル)をリストビューに表示する必要があります。私は動的リストビューを使用しています。助けてくれてありがとう!これは私が今使っているコードで、onCreateメソッドの項目を読む必要があります。ディレクトリからリストビューへandroidでアイテムを読む

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(); 
    } 
} 
} 
+1

あなたの質問には答えられないため、答えとして追加しません。しかし、私はこれが役に立つと思います。 https://github.com/Kaloer/Android-File-Picker-Activity/blob/master/src/com/kaloer/filepicker/FilePickerActivity.java – Knossos

+0

リンクのためにファイルピッカーのおかげで素晴らしいソリューションに見えます。 – FoamyGuy

答えて

1

myListがあなたのディレクトリからファイル名を保持していると仮定します。あなたはそれをインスタンス化しなかったようです。

これを行うには、ファイル名のリストを取得してアダプタを作成する前にロードする必要があります。

だから、(あなたの.setAdapter前にこのような何かを追加)を呼び出します:

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

それは正しく配列を満たす場合は、行くために良いことがあります。

p.s. File.list() docs

EDIT:

おっと、はmyListのタイプに気付きませんでした。これを代わりに使用してください

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

それからこれは言う:タイプの不一致:文字列[]からリストに変換することができません user1183066

+0

私は変換が必要であることに気付かなかった、私の編集を参照してください。 – FoamyGuy

+0

が機能しませんでした。配列を型に解決することはできません – user1183066

関連する問題