【问题标题】:List view should show a text view after click on list item单击列表项后,列表视图应显示文本视图
【发布时间】: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


【解决方案1】:

错误提示:

ActivityNotFoundException: Unable to find explicit activity class {fm.de.geschichten/fm.de.geschichten.ListViewShow}; have you declared this activity in your AndroidManifest.xml?

因此,请确保您已在清单文件中添加您的活动ListViewShow.java 以及应用程序标记下的其他活动。

【讨论】:

  • Awesone 谢谢,第一步搞定了,我前段时间改名了,所以Manifest里有假名(App只有这两个Activity)。所以现在我可以点击列表视图项目。现在它打开了一个新的文本视图,其中只有单词“大文本”。好吧,我想我的问题是如何从这个框中的文件中获取文本。此外,所有 30 个文本都在考虑特定的列表视图项。
  • 很遗憾,没有。如果我单击列表项出现的文本视图不显示我的 test.txt 文件的内容。只有“大文本”。它应该显示我的 test.txt 的内容(“Hello World...Hello Android”)。但似乎缺少对 test.txt 文件的调用。谢谢你!不知道该怎么做。这也是我最初对帖子提出的问题。
  • 哦..您是否调试过您是否正确传递了点击的文本?
  • 没有发生错误。但是,如果我单击该项目,则只会显示我的默认文本视图:setContentView(R.layout.textview_show);(其中包含字符串“Large Text”)。但我想要连接到我的文本文件,而不是布局 xml 文件,它只应该给出视图的样式。
  • 你的意思是像this这样的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多