【问题标题】:How do I start an intent once a listView item is clicked?单击 listView 项目后,如何启动意图?
【发布时间】:2017-06-12 15:44:38
【问题描述】:

我有一个 listView 显示正在进行的比赛。我的目标是在单击 listView 中的锦标赛后显示在每个锦标赛中组织的运动(在单独的活动中,也以 listView 的形式)。

我正在使用火力基地。我主要关心的是如何将点击的锦标赛的锦标赛 ID 与意图一起发送。

这是我的数据库的样子:

这是代码:

   //tournament_list view to be populated with tournament data
    final ListView tournamentListView = (ListView) findViewById(R.id.tournament_list);

    //finding and setting the empty view in the listView when the tournament_list has 0 items
    View emptyView = findViewById(R.id.empty_view);
    tournamentListView.setEmptyView(emptyView);

    final ArrayList<String> tournamentNamesList = new ArrayList<String>();
    final DatabaseReference tournamentRef = mDatabase.child("Tournaments");

    final HashMap<String,String> nameIdMatcher = new HashMap<>();

    tournamentRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot tournament : dataSnapshot.getChildren()) {
                TournamentInformation tournamentInformation = new TournamentInformation();
                tournamentInformation.setTournamentName(tournament.getValue(TournamentInformation.class).getTournamentName());
                tournamentNamesList.add(tournamentInformation.getTournamentName());

                nameIdMatcher.put(tournamentInformation.getTournamentName(),tournament.getKey());
                Log.d("Tournament Id:",tournament.getKey());
                Log.d("Main Activity", tournamentInformation.getTournamentName());
            }

            StringAdapter stringAdapter = new StringAdapter(MainActivity.this,tournamentNamesList);
            tournamentListView.setAdapter(stringAdapter);

            tournamentListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Intent intent = new Intent(MainActivity.this,SportsListActivity.class);
                    String tournamentName = tournamentNamesList.get(position);
                    tournamentId = nameIdMatcher.get(tournamentName);
                    intent.putExtra("tournamentId",tournamentId);
                    startActivity(intent);
                }
            });
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });`

我读到 putExtra() 方法将通过意图发送数据,但我仍然不确定如何检索点击的 textView 的锦标赛 ID。我不太确定 onItemClick() 方法中的 'id' 参数是什么。

任何帮助将不胜感激!

提前致谢!

【问题讨论】:

  • 在此处发布您的代码
  • “我读到 putExtra() 方法将通过意图发送数据,但我仍然不确定如何检索点击的 textView 的锦标赛 ID”:看这里 -> @987654322 @“我不太确定 onItemClick() 方法中的 'id' 参数是什么”它是一个 int,表示单击的列表视图项的位置。它从 0 开始,就像数组一样...

标签: android listview firebase android-intent firebase-realtime-database


【解决方案1】:

使用它从列表视图点击获取锦标赛名称

tournamentListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

String tournamentName = tournamentNamesList.get(position);

【讨论】:

  • 虽然这可行,但我怎样才能获得锦标赛 ID?有没有办法根据锦标赛名称获取锦标赛 ID?
  • 我在您的代码中没有看到您保存锦标赛 ID 的任何地方。您是否将您的锦标赛 ID 保存在您共享的代码之外的某个位置??
  • 锦标赛 ID 可以通过在 for 循环中执行此操作来获得 - 锦标赛.getKey()。除此之外,我不确定有没有办法做到这一点
  • @YashChowdhary 自定义您的锦标赛名称列表,并与锦标赛名称一起存储带有 id 的锦标赛 ID,这样您就可以随时轻松获取锦标赛名称和锦标赛 ID
  • @YashChowdhary 好的,您可以这样做,但更好的解决方案是自定义您的锦标赛名称列表,以便您可以将锦标赛 ID 和锦标赛名称存储在一起。但无论如何,做任何你觉得舒服的事。
猜你喜欢
  • 2013-03-30
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
相关资源
最近更新 更多