在片段中与 onItemClick 斗争

Posted

技术标签:

【中文标题】在片段中与 onItemClick 斗争【英文标题】:Struggling with onItemClick in fragment 【发布时间】:2016-03-03 14:36:35 【问题描述】:

我已经尝试了多种不同的方法来让它发挥作用。我有 4 个使用片段类的可滑动选项卡,当我扩展片段时添加一个列表,我无法让 onListItemClick 工作,我尝试使用 listfragment 但与我尝试实现 onitemclick 的片段冲突,我尝试了许多其他方法但我总是以错误告终。我在这里得到的错误是 onitemclick 从未使用过。 谁能帮忙!!

import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;

public class LeagueOne extends Fragment 


String[] teams = "Barnsley", "Blackpool", "Bradford City",
        "Burton Albion", "Bury", "Chesterfield", "Colchester United", "Coventry City",
        "Crewe Alexandra", "Doncaster Rovers", "Fleetwood Town", "Gillingham", "Millwall",
        "Oldham Athletic", "Peterborough United", "Port Vale", "Rochdale", "Scunthorpe United",
        "Sheffield United", "Shrewsbury Town", "Southend United", "Swindon Town", "Wallsall", "Wigan Athletic";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) 

    View rootView = inflater.inflate(R.layout.simple_list_item, container, false);
    ListAdapter adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, teams);
    ListView lv = (ListView) rootView.findViewById(R.id.list);
    lv.setAdapter(adapter);

    return rootView;





protected void onListItemClick (ListView l, View v, int position, long id) 
    if (position == 2) 
        Intent intent = new Intent(getActivity(),BradClass.class);;
        startActivity(intent);


【问题讨论】:

H:\DrawerWithSwipeTabs\app\src\main\java\com\androidbelieve\drawerwithswipetabs\TabFragment.java 错误:(71, 31) 错误:需要不兼容的类型:发现片段:LeagueOne 错误:执行任务“:app:compileDebugJava”失败。 > 编译失败;有关详细信息,请参阅编译器错误输出。 【参考方案1】:

尝试使用下面的代码。

 lv.setOnItemClickListener(new AdapterView.OnItemClickListener()

  @Override
            public void onItemClick(AdapterView<?> parent, View view, int     position, long id) 
//your logic for onclick goes here
  
        );

【讨论】:

【参考方案2】:

1- 您的 Fragment 必须扩展 ListFragment 才能使用 onListItemClick 方法。这意味着您必须在 Fragment 的布局中定义一个 ListView,其 id@android:id/list

2- 然后在您的fragment 的代码中,您可以使用getListView() 方法轻松访问ListView

3- 使用setListAdapter(adapter) 而不是lv.setAdapter(adapter); 设置其适配器

4- 从这一行的末尾删除一个分号:

Intent intent = new Intent(getActivity(),BradClass.class);;

替代,您可以创建自定义ArrayAdapter,将Activitycontext 传递给它的构造函数,然后设置ListView 中的项目的听众。

【讨论】:

嗨,我在尝试此操作时遇到的 TabFragment 类中出现错误,它说需要不兼容的类型 android.support.v4.fragment 然后找到我的包和类 com 的链接。 android.drawerwithtabs.leagueone【参考方案3】:

实现AdapterView.OnItemClickListener,然后将其设置为ListView

public class LeagueOne extends Fragment implements  AdapterView.OnItemClickListener 

然后将此引用设置为onItemClickListener()

lv.setOnItemClickListener(this)

然后实现onItemClick方法

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
      //your logic for onclick goes here

【讨论】:

以上是关于在片段中与 onItemClick 斗争的主要内容,如果未能解决你的问题,请参考以下文章

在可可中与货币作斗争

在 React 中与 JS Promises 作斗争

listview OnItemClick 侦听器在片段中不起作用

从片段中ListView的onItemClick开始Activity

在 Rust 中与生命周期的子类型关系作斗争

OnItemClick 如何从列表视图中获取单击项目的文本值