Java 如何打开与字符串中定义的名称相同的文件?
我正在创建一个抒情应用程序,我需要一些帮助来编写我需要的下一个过程。 我创建了一个ListView并在上面添加了一些字符串Java 如何打开与字符串中定义的名称相同的文件?,java,android,string,listview,onclicklistener,Java,Android,String,Listview,Onclicklistener,我正在创建一个抒情应用程序,我需要一些帮助来编写我需要的下一个过程。 我创建了一个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 pr
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);
}
}
public类MainActivity扩展了AppCompatActivity{
字符串标题[]=新字符串[]{“神奇的恩典”,“你是多么伟大”,
“万王之王”,“多么美丽的名字”};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView ListView=(ListView)findViewById(R.id.titlelist);
ArrayAdapter适配器=新的ArrayAdapter
(这是android.R.layout.simple_list_item_1,titles);
setAdapter(适配器);
}
}
现在下一步是创建一个监听器
如果从列表中选择“惊人的优雅”,
它将查找与字符串中定义的名称相同的文件。
例如:“惊人的Grace.xml”//即使包含空格
因此,逻辑将类似于:openfilelocation/“title that selected”.xml
我不能使用“case”,因为我将创建很多歌曲标题,并在更新应用程序时添加更多内容。
感谢您的阅读,我非常感谢您的帮助;) 要打开文件:
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”
你应该映射你的歌词,所以当你用pos=5
点击项目时,你会知道什么项目的ps与什么文件(或xml)相关
以下是如何使用文件名映射ID的示例:
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);
//..
HashMap-lyricsMap=newhashmap();
歌词地图(0,R.raw.song_歌词0);
歌词地图(1,R.raw.song_歌词1);
歌词地图(2,R.raw.song_歌词2);
歌词地图(3,R.raw.song_歌词3);
歌词地图(4,R.raw.song_歌词4);
歌词地图(5,R.raw.song_歌词5);
歌词地图(6,R.raw.song_歌词6);
//..
以下是如何使用McClickListener的示例:
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);
AdapterView.OnItemClickListener OnItemClickListener=new AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView、View-View、int-pos、long-id){
int rawrist=lyricsMap.get(pos);
//下面是根据文件的资源id返回歌词的方法
//...
}
};
adapter.setOnItemClickListener(onItemClickListener);
另外,我假设你不是在处理数据库项目,否则你应该使用
id
而不是pos
值。google:java字符串连接让我们假设我放在每个位置的歌词标题不是按字母顺序排序的,位置0=“像你”位置1=“热情的战士”位置2=“惊人的优雅”…如果我使用一个命令来整理这些标题,他们会改变位置还是仍然保留它们?因为我需要知道这个方法是否有效,即使我只是在列表中添加了更多的歌曲标题,而没有按照字母顺序一次又一次地手动排序。我忘了使用webview。在onclick中分配的1)int pos=parent.getPositionForView(view)//和2)webView1.loadUrl(“file:///android_asset/“+标题[pos]+”.xml”);我会成功的。标题为[selected]+“.xml”的创意。谢谢你,伙计!