Как открыть файл с таким же именем, как определено в строке? - PullRequest
0 голосов
/ 06 июня 2018

Я создаю лирическое приложение, и мне нужна помощь в кодировании следующих процессов, которые мне нужны.Я создал ListView и добавил несколько строк в него.

public class MainActivity extends AppCompatActivity {

String titles[] = new String [] {"Amazing Grace", "How Great Thou Art", 
"King of All Kings", "What A Beautiful Name"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ListView listView =(ListView) findViewById(R.id.titlelist);
    ArrayAdapter<String> adapter=new ArrayAdapter<String> 
    (this,android.R.layout.simple_list_item_1,titles);
    listView.setAdapter(adapter);
 }
}

Теперь следующим шагом будет создание OnItemClickListener и, скажем, если в списке выбрано «Amazing Grace», он будет искать файл, которыйтакое же имя, как оно определено в строке.Например: «Amazing Grace.xml» // даже с включенным пробелом

, поэтому логика будет такой: открыть расположение файла / «заголовок, который был выбран» .xml

Я не могуиспользуйте «case», так как я буду создавать множество названий песен и добавлять новые по мере обновления приложения.Спасибо за чтение, я очень признателен за любую помощь;)

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вам следует сопоставить текст песни, поэтому, когда вы щелкнете по элементу с помощью pos = 5, вы будете знать, какой ps элемента соотносится с каким файлом (или xml).

Вот пример того, как сопоставить идентификаторы с именами файлов:

HashMap<String,Strin> lyricsMap = new HashMap<>();
lyricsMap(0, R.raw.song_lyric0);
lyricsMap(1, R.raw.song_lyric1);
lyricsMap(2, R.raw.song_lyric2);
lyricsMap(3, R.raw.song_lyric3);
lyricsMap(4, R.raw.song_lyric4);
lyricsMap(5, R.raw.song_lyric5);
lyricsMap(6, R.raw.song_lyric6);
//..

Вот пример использования OnItemClickListener:

AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
        int rawResId = lyricsMap.get(pos);

        //here comes the method for returning lyrics for file by it's resource id

        //...
    }
};
adapter.setOnItemClickListener(onItemClickListener);

PS Я предполагаю, что вы не работаете с элементами базы данных, в противном случае вам следует использовать id вместо pos значение.

0 голосов
/ 06 июня 2018

Чтобы открыть файл:

int selected = 0; // set selected to index of what is selected
File file = new File(Environment.getExternalStorageDirectory(), //folder location where you store the files
titles[selected]+".xml"); //in case of xml files. If other types, you'll need to add case for diff types
Uri path = Uri.fromFile(file);
Intent fileOpenintent = new Intent(Intent.ACTION_VIEW);
fileOpenintent .setDataAndType(path, "application/xml"); //for xml MIME types are text/xml and application/xml
try {
    startActivity(fileOpenintent);
}
catch (ActivityNotFoundException e) {

}

Ваша самая большая проблема, как вы объяснили, это как обрабатывать несколько имен файлов.Вот эта часть кода: titles[selected]+".xml"

...