[解決済み] Logcatのエラーです。ListView の "addView(View, LayoutParams) is not supported in AdapterView" は、AdapterView ではサポートされていません。
質問
Android用のアプリケーションを作っているのですが、SDカード内のすべてのファイルとディレクトリのリストを表示し、異なるディレクトリを移動できるようにする必要があります。私は、次のものを見つけました。 の良いチュートリアルです。 . Androidのルートディレクトリではなく、SDカードにアプリが移動するように少し修正しましたが、あとはほとんど同じです。
これは私のアクティビティ用のxmlファイルです。
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</ListView>
そして、これがActivityのコードです。
import hackreatorz.cifrador.R;
import java.io.File;
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class ArchivosSD extends ListActivity {
private ArrayList<String> directoryEntries = new ArrayList<String>();
private File currentDirectory = new File("/sdcard/");
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
browseToSD();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
private void browseToSD() {
browseTo(new File("/sdcard/"));
}
private void upOneLevel() {
if(this.currentDirectory.getParent() != null)
this.browseTo(this.currentDirectory.getParentFile());
}
private void browseTo(final File directory) {
if (directory.isDirectory()) {
this.currentDirectory = directory;
fill(directory.listFiles());
} else {
Toast.makeText(ArchivosSD.this, this.directoryEntries.get(this.getSelectedItemPosition()), Toast.LENGTH_SHORT).show();
}
}
private void fill(File[] files) {
this.directoryEntries.clear();
this.directoryEntries.add(getString(R.string.current_dir));
if(this.currentDirectory.getParent() != null)
this.directoryEntries.add(getString(R.string.up_one_level));
int currentPathStringLength = (int) this.currentDirectory.getAbsoluteFile().length();
for (File file : files) {
this.directoryEntries.add(file.getAbsolutePath().substring(currentPathStringLength));
}
setListAdapter(new ArrayAdapter<String>(this, R.layout.archivos_sd, this.directoryEntries));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
int selectionRowID = (int) this.getSelectedItemPosition();
String selectedFileString = this.directoryEntries.get(selectionRowID);
if (selectedFileString.equals(".")) {
this.browseToSD();
} else if(selectedFileString.equals("..")) {
this.upOneLevel();
} else {
File clickedFile = null;
clickedFile = new File(this.currentDirectory.getAbsolutePath() + this.directoryEntries.get(selectionRowID));
if(clickedFile != null)
this.browseTo(clickedFile);
}
}
}
Eclipseではエラーは出ないのですが、スマホでアプリケーションを実行するとForce Closeが発生し、Logcatを見ると以下のように表示されています。
01-01 23:30:29.858: ERROR/AndroidRuntime(14911): FATAL EXCEPTION: メイン 01-01 23:30:29.858: ERROR/AndroidRuntime(14911): java.lang.UnsupportedOperationException: addView(View, LayoutParams) は AdapterView ではサポートされていません。
Googleで調べても出てこないし、stackoverflowでも同じように調べてみたのですが、どうすればいいのかさっぱりわかりません。これは私のJavaとAndroid用の最初のアプリケーションなので、私は本当のn00bです。答えがそこにあったとしても、私はそれを理解していなかったので、私はこのエラーを修正するために何をすべきか、その理由を説明していただけると本当に感謝します。
いろいろとありがとうございました。
どのように解決するのですか?
を作成する際に ArrayAdapter のように、ArrayAdapter にはレイアウトリソースが必要です。 を含むTextViewだけです。 でArrayAdapterの作成を変更してみてください。
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
this.directoryEntries));
を実行し、動作するかどうかを確認します。
関連
-
[解決済み】react-native: コマンドが見つかりません。
-
[解決済み】Android Intent コンストラクタを解決できない
-
[解決済み】インストールエラー。インストールエラー:install_failed_older_sdk
-
[解決済み】シンボル 'AppCompatActivity' を解決できない。
-
[解決済み】Androidエミュレータのエラーメッセージ。"PANIC: Missing emulator engine program for 'x86' CPUS." (パニック: エミュレータ・エンジン・プログラムがありません)
-
[解決済み】Android Studio AVD - Emulator: 終了コード 1 でプロセスが終了
-
[解決済み】Android Studioです。「プロジェクトが C ドライブに作成されている場合、「タスク ':app:mergeDebugResources' の実行に失敗しました。
-
[解決済み] TypeError: cb.apply は関数ではありません。
-
[解決済み] AndroidでBluetoothが有効かどうかのチェックに失敗する(REQUEST_ENABLE_BTを変数に解決できない)。
-
[解決済み] setBackgroundDrawable() 非推奨
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android ADB デバイスがオフラインで、コマンドを発行できない。
-
[解決済み】AndroidのSSL接続でトラストアンカーが見つからない
-
[解決済み】Android Studioでマニフェストのマージに失敗し、複数のエラーが発生した。
-
[解決済み】apkファイルのインストール中に「パッケージが破損しているようです」というエラーが発生する。
-
[解決済み】ビューのルートとしてNULLを渡さないようにする(膨張したレイアウトのルート要素でレイアウトパラメータを解決する必要がある)。
-
[解決済み】Android Studio。Android.support.design.widget.FloatingActionButton クラスを膨らませるのにエラーが発生する。
-
[解決済み】'dependencies' を '(groovy.lang.Closure)' に適用できない。)
-
[解決済み] Mockito lenient() を使用する場合
-
[解決済み] AndroidのADBデバイスが不正に
-
[解決済み] SDKの場所がandroid studioで見つからない