【问题标题】:I have a ListView, can I send all the information to one TextView and only display the information based on the OnItemClick?我有一个 ListView,我可以将所有信息发送到一个 TextView 并仅显示基于 OnItemClick 的信息吗?
【发布时间】:2023-03-12 05:09:01
【问题描述】:

我有一个列表视图。它包含我从网上提取的 JSON。我希望 ListView 中的每个项目都转到 same 活动和 same TextView。从表面上看,这很容易。

但是,我希望 TextView 根据用户点击的内容显示不同的项目。事实上,最好将其设为两个 TextView,因为其中一个具有链接。有两行文字,一是链接。

因此,如果用户按下第一个列表项,他们会转到此活动并显示 information_01。如果同一个用户退出然后转到第二个列表项,它应该转到同一个活动并显示 information_02,依此类推。

我会告诉你我到目前为止所拥有的,没什么特别的:

title.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

                  switch (position) {
                  case 0:
                      Driver p = (Driver) title.getItemAtPosition(position);
                      Intent i = new Intent(MainActivity.this, DataActivity.class);
                      i.putExtra("one_id", p.id);
                      i.putExtra("one_link", p.link);
                      MainActivity.this.startActivity(i);
                  case 1:
                      Driver p1 = (Driver) title.getItemAtPosition(position);
                      Intent i1 = new Intent(MainActivity.this, DataActivity.class);
                      i1.putExtra("two_id", p1.id);
                      i1.putExtra("two_link", p1.link);
                      MainActivity.this.startActivity(i1);
                  case 2:
                      break;
                  }

希望这是可能的,因为为每个列表项创建一百万个活动是一件很痛苦的事情。就像我说的那样,其中一个是我需要发送到我的应用程序的另一个页面的链接。所以请记住,需要显示它并点击它。

非常感谢您对此事的帮助。提前致谢。

编辑:我的 DataActivity.class

public class DataActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.data_list);

    //Case 0
    Intent intent0 = getIntent();
    String link0 = intent0.getStringExtra("one_link");
    String id0 = intent0.getStringExtra("one_id");

    TextView data0 = (TextView) findViewById(R.id.case0Text);
    data0.setText("ID: " + id0 + "\n\n Click here: " + link0);

    //Case 1
    Intent intent1 = getIntent();
    String id1 = intent1.getStringExtra("two_id");
    String link1 = intent1.getStringExtra("two_link");

    TextView data1 = (TextView) findViewById(R.id.case1Text);
    data1.setText("ID: " + id1 + "\n\n Click here: " + link1);
}
}

【问题讨论】:

  • DataActivity的邮政编码

标签: android listview onclick textview switch-statement


【解决方案1】:

这样试试

 @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long arg3) {

            Driver driver = (Driver) parent.getAdapter().getItem(position);
                Intent intent = new Intent(MainActivity.this, DataActivity.class);
                intent.putExtra("one_id", driver.id);
                intent.putExtra("one_link", driver.link);
                MainActivity.this.startActivity(intent);

        }

希望这会奏效。

【讨论】:

  • 我不知道它是如何工作的。我猜父母是 ListView ,是的,从那里得到 onClick 。如果我想在 one_link 出现的地方创建一个链接,你知道我该怎么做吗?
  • @RED_ 如果有帮助并解决您的问题,您应该接受答案。
  • 当然。不过,我发送给该活动的信息是否有可能发生 onClick?只是这样我知道这可以工作,我不需要改变它。
  • @RED_ 不需要写switch()语句,这足以传递List的选定索引的值。所以只需要一个键而不是 two_id、two_link 等等。谢谢。
【解决方案2】:

您将 json 数据存储在哪里?将其存储在 hashmap 中并根据 itemclick 方法的位置检索它,您不必做很多事情。

【讨论】:

  • 它被拉了,我把它放在一个ArrayList中,ArrayList将它转换成一个ListView。甚至不知道从哪里开始 HashMpas
  • 你能贴出你的代码吗,你如何在arraylist中存储json数据,你存储什么样的数据。
  • 实际上我之前发布了一个关于它的问题,因为我不明白将它存储在 ListView 中的想法。检查我提出的最后一个问题。看起来 Amits 的答案虽然有效。
【解决方案3】:

试试这个

title.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {


                  Driver p = (Driver) title.getItemAtPosition(position);
                  Intent i = new Intent(MainActivity.this, DataActivity.class);
                  i.putExtra("id", p.id);
                  i.putExtra("link", p.link);

              }

DataActivity.class

  public class DataActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.data_list);

    //Case 0
    Intent intent0 = getIntent();
    String link0 = intent0.getStringExtra("link");
    String id0 = intent0.getStringExtra("id");

    TextView data0 = (TextView) findViewById(R.id.case0Text);
    data0.setText("ID: " + id0 + "\n\n Click here: " + link0);


}
}

你可以在DataActivity的xml中取两个textView,一个用于idid,一个用于链接,并使链接的textview可点击,并在其上设置一个clickListener。

【讨论】:

  • Amit 给出了一个有效的答案,但我会记住这一点,因为它看起来很相似。现在必须让它根据每个链接显示不同的东西,这将是一场噩梦。
  • 当我的意思是我需要其中一个 TextView 可点击时,我的意思是它们也必须转到同一个活动(Information.class),但在该活动中将显示不同的数据。我想它可以在 ListView 中完成,因为有明确的列表,但在 TextView 中没有,它只是一遍又一遍的一件事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 2019-12-10
  • 1970-01-01
  • 2017-10-16
  • 2014-08-10
  • 1970-01-01
相关资源
最近更新 更多