【发布时间】:2014-11-21 10:13:38
【问题描述】:
作为一个初学者,我正在尝试开发一个简单的睡前故事应用程序(第一个在 Android 上大约 10 到 30 个故事。
这个想法是有一个列表视图,其中每个列表项都显示故事的标题。 - 我不知道如何动态添加特定标题(认为最好的方法是从 .txt 文件的标题中),所以每个列表项都变成了名称“故事”+ i(i 表示计数的列表项)。
在下一步中 - 如果一个项目(故事)被点击 - 应用应该只显示一个简单的文本视图,并且可以阅读完整的故事(大约 200 字)。
正如您所见,我从网络上获取故事文本的想法是将故事写入 .txt 文件,按评估顺序排列,然后通过 fileInpitStream 读取。
文本文件以“story1.txt”“story2.txt”等简单命名。
所以我最大的问题是如何在单击列表项时将每个列表项与以下匹配的文本文件“-.txt”结合起来?
如果您需要任何进一步的信息(XML 文件 - 但主要是标准文件 - 或其他),请告诉我。我非常感谢每一个帮助我实现我的小想法的答案!
主活动:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List valueList = new ArrayList<String>();
//filling List Items
for(int i=1;i <30; i++){
valueList.add("Story " +i);
}
//List Adapter
ListAdapter adapter = new ArrayAdapter<String>(getApplicationContext(),
R.layout.custom_textview, valueList);
final ListView lv = (ListView)findViewById(R.id.listView1);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int arg2, long arg3)
{
Intent intent = new Intent();
intent.setClassName(getPackageName(), getPackageName()+".ListViewShow");
intent.putExtra("selected", lv.getAdapter().getItem(arg2).toString());
startActivity(intent);
}
});
}
}
ListViewShow(从listview到textview的组合应该在哪里):
public class ListViewShow extends Activity {
private static final String TAG = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.textview_show);
AssetManager assetManager = getResources().getAssets();
InputStream inputStream = null;
try {
inputStream = assetManager.open("test.txt");
if ( inputStream != null)
Log.d(TAG, "It worked!");
} catch (IOException e) {
e.printStackTrace();
}
}}
LogCat 错误消息:
09-27 17:37:56.797: W/dalvikvm(5622): threadid=1: thread exiting with uncaught exception (group=0x4163eba8)
09-27 17:37:56.827: E/AndroidRuntime(5622): FATAL EXCEPTION: main
09-27 17:37:56.827: E/AndroidRuntime(5622): Process: fm.de.geschichten, PID: 5622
09-27 17:37:56.827: E/AndroidRuntime(5622): android.content.ActivityNotFoundException: Unable to find explicit activity class {fm.de.geschichten/fm.de.geschichten.ListViewShow}; have you declared this activity in your AndroidManifest.xml?
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1628)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.app.Activity.startActivityForResult(Activity.java:3424)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.app.Activity.startActivityForResult(Activity.java:3385)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:840)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.app.Activity.startActivity(Activity.java:3627)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.app.Activity.startActivity(Activity.java:3595)
09-27 17:37:56.827: E/AndroidRuntime(5622): at fm.de.geschichten.MainActivity$1.onItemClick(MainActivity.java:47)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.widget.AdapterView.performItemClick(AdapterView.java:299)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2911)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.widget.AbsListView$3.run(AbsListView.java:3645)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.os.Handler.handleCallback(Handler.java:733)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.os.Handler.dispatchMessage(Handler.java:95)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.os.Looper.loop(Looper.java:136)
09-27 17:37:56.827: E/AndroidRuntime(5622): at android.app.ActivityThread.main(ActivityThread.java:5001)
09-27 17:37:56.827: E/AndroidRuntime(5622): at java.lang.reflect.Method.invokeNative(Native Method)
09-27 17:37:56.827: E/AndroidRuntime(5622): at java.lang.reflect.Method.invoke(Method.java:515)
09-27 17:37:56.827: E/AndroidRuntime(5622): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-27 17:37:56.827: E/AndroidRuntime(5622): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
09-27 17:37:56.827: E/AndroidRuntime(5622): at dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
-
你已经拥有了你所描述的一切,所以为什么要告诉我们这个并发布所有代码。您可以从第二个活动的意图附加内容中检索“story5.txt”。您唯一没有的是从资产中读取该文件。相反,您尝试像在文件系统上一样读取。
-
好吧,我不会问我是否已经知道解决方案。我完全改变了“ListVIewShow”活动。所以,但如果我点击一个列表项,如何才能显示文本文件?它总是出现一个错误,说不幸的是应用程序已停止..
-
如果崩溃,请使用 logcat 输出编辑问题 :)
-
您从意图 getExtras 中删除了确定,但是对于测试来说还可以。请重新放入。您从资产代码中读取的内容看起来不错。资产中有文件 test.txt 吗?此外,您应该在 catch 块中放置一条日志语句。并查看 LogCat,因为它会告诉您错误和堆栈跟踪。发布日志猫。
-
我认为您的意思是这一行:
// Following line just shows a simple line of text //((TextView)(findViewById(R.id.textView1))).setText("You selected "+intent.getStringExtra("selected")+ "!");所以它可以使用它,但它似乎没有 test.txt 文件的任何上下文,它只是显示一行,这不是什么我想了。但当然,我想要的 test.txt 文件中没有任何内容。我添加了 LogCat 消息。是的,test.txt 文件放在 Assets 顺序中
标签: android list listview textview