java - Android Fragment 的 onClickListener 未调用

标签 java android android-fragments onitemclicklistener

我有一个 fragment ,其标题带有两个按钮和一个列表。我想获取这些项目的事件。该 fragment 动态添加到 UI,并且我的应用程序适用于 android 16 及更高版本,因此我不必使用支持库。 我决定对 MainActivity 上的按钮和列表实现单击监听器,因为这些会触发数据库查找,并且我希望将数据库查找保留在一处。因此,我创建了一个同时实现 OnClickListener 和 OnItemClickListener 的主要 Activity ,并添加了以下方法:

public void onClick(View v) {
Toast.makeText(getApplicationContext(), "List Click", Toast.LENGTH_SHORT).show();
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Toast.makeText(getApplicationContext(), "List Click"+arg2, Toast.LENGTH_SHORT).show();
}

调用我所做的 fragment :

//get a list of the data
Fragment sideFormations=sideFragment.newInstance(list);
sideFormations.setClickListeners(this,this); //<--important bit
Toast.makeText(getApplicationContext(), "listeners set", Toast.LENGTH_SHORT).show();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.side_frame,sideFormations);
ft.commit();

在frag的setClickListener方法中,我设置将传入的值保存为点击监听器。frag的相关部分是:

onCreateView: //nflate the views, setAdapter for the list, ensure clickability of the views
onStart: //assign click listeners which were passed in to the list, and to the header. 

我仍然无法捕获主要 Activity 中的点击。零但没有错误。任何想法都将受到高度欢迎和赞赏。谢谢。

编辑:在我定义 View 监听器的位置添加代码。

//This is the latest iteration. As I mentioned, I have tried to set these at different places in the frag's lifecycle without much success:
public void onStart() {
    super.onStart();
    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
            System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!");
            Log.d("CLICK-VIEW","List Clicked");
            main.onItemClick(arg0,arg1,arg2,arg3);
        }               
    });
    mHeaderView.setOnClickListener(new OnClickListener() {          
        @Override
        public void onClick(View v) {
            System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!");
            Log.d("CLICK-VIEW","Header Clicked");
            //main.onClick(v);
        }
    });
}

最佳答案

您不能将 fragment 的监听器直接放置到 MainActivity.class 中,因为创建的 View 由 fragment 拥有,而 fragment 又由 Activity 动态拥有,对吗?所以同样的情况也发生在我身上,我是这样解决的:

MainActivity.class

public class MainActivity extends FragmentActivity{

    //Create two public methods

   public void onFragmentListClick(params whtever you want to pass){
     //will call from fragment when list item click
     Toast.makeText(getApplicationContext(), "List Click", Toast.LENGTH_SHORT).show();
   }

   public void onFragmentButtomClick(params whtever you want to pass){
     //will call from fragment when button click
     Toast.makeText(getApplicationContext(), "Button Click", Toast.LENGTH_SHORT).show();
   }
}

Fragment.class

public class MyFragment extends Fragment{
  private Button b;
  private ListView lst;

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

View fragmentView = inflater.inflate(setLayoutId(), container, false);
b = (Button)fragmentView.findViewById()     
lst = (ListView)fragmentView.findViewById()     

b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                ((MainActivity) getActivity()).onFragmentButtomClick(..);
            }
        });

        lst.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                                ((MainActivity) getActivity()).onFragmentListClick(..);         
            }
        });

        return fragmentView;
    }
}

关于java - Android Fragment 的 onClickListener 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436140/

相关文章:

java - 多对一选择语句?

java - 如何修复此循环验证?

android - 动态功能 Activity 未加载,卡在安装中

java - Mysql Android 连接错误

java - FragmentTransaction.add()

java - 从不同的 AsyncTask 更改 AsyncTask 中的布局

java - 仅使用实例角色从 Java 应用程序向 SES 发送邮件

android - findViewById 在 include 的内部 View 上返回 null

android - 如何在 fragment 中将方向更改为横向,但在返回 Activity 时从传感器读取?

java - android.view.InflateException : Binary XML file line #2: