2016-04-08 14 views
0

私はSharedPreferencesを使用してアプリケーション言語を選択しようとしています。私は翻訳された外部のXMLファイルを持っているので、単にデフォルトのアンドロイドスタジオの翻訳者を使うことはできません。私の問題は、下のInputStream行がアダプタ内で動作しないことです(このアダプタはRecyclerView項目の中にXMLコンテンツを置きます)。基本的にopenFileInputは機能せず、getApplicationContext()も表示されないので、これを解決する方法はわかりません。アダプタ内のファイルから読み取る

アダプタ内のファイルから読み込む方法はありますか?

readFromFile(){ 
InputStream inputStream = openFileInput("language"); 
... 
} 
+0

ファイルはどこに保存されていますか?あなたの 'Adapter'は' ArrayAdapter'ですか? – shhp

+1

おそらく、アダプタの中にファイルをロードしたくないかもしれません。あなたは、アダプタに渡すデータセットを作成するときにそれを行う必要があります。 –

+0

@MikeM。だから私は、たとえば、AsyncTaskを使用する必要がありますか? –

答えて

1

あなたがArrayAdapterを使用している場合は、この配列のアダプタに関連付けられているコンテキストを取得するためにgetContext()を呼び出すことができます。つまり、メインスレッド内のファイルを読むためBAD練習です、しかし

readFromFile(){ 
    InputStream inputStream = getContext().openFileInput("language"); 
    ... 
} 

です。バックグラウンドスレッドでファイルを読み取り、そのスレッドのデータを処理する必要があります。データ構造を使用してそのファイルに情報を格納し、後で使用するためにデータ構造をArrayAdapterに渡すことができます。

+0

私はgetContext()を使用できません。andriodはそれを認識しません。ここでのベストプラクティスは、たとえばAsyncTask?を使用することです。 –

+0

はい、AsyncTaskを使用する方が良いです。だから、あなたの 'アダプタ'は何ですか? – shhp

+0

XMLファイル内のコンテンツで 'recyclerview'の内部に' cardview'sを埋め込むために私のアダプタを使用します(これは内部の電話機のストレージ上にあります)。私はアダプタから直接sharedpreferencesを取得できないため、この行が必要です。そのため、MainActivity内に言語設定を書き、アダプターの中で言語(フランス語)を読みます。 –

関連する問題