【问题标题】:Android Fragment's onClickListener not called未调用 Android Fragment 的 onClickListener
【发布时间】:2013-08-26 03:22:36
【问题描述】:

我有一个带有两个按钮的标题和一个列表的片段。我想获得关于这些项目的事件。该片段是动态添加到 UI 中的,我的应用程序适用于 android 16 及更高版本,因此我不必使用支持库。 我决定在 MainActivity 上的按钮和列表上实现单击侦听器,因为这些会触发数据库查找,并且我想将我的数据库查找保留在一个地方。所以,我做了一个主要的活动来实现:OnClickListener 和 OnItemClickListener 并添加了以下方法:

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();
}

调用我做的片段:

//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的方法中,我将传入的值设置为click listeners。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. 

我仍然无法在主要活动中捕捉点击,即。零但没有错误。任何想法都将受到高度欢迎和赞赏。谢谢你。

编辑:在我为视图定义侦听器的位置添加代码。

//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);
        }
    });
}

【问题讨论】:

  • 能否请您在定义视图的侦听器的位置添加代码?
  • @owe 嘿。谢谢。我现在添加它。
  • 这很奇怪......但是:你说你的 headerView 由两个按钮组成。您应该为每个按钮添加一个 ClickListener,现在您似乎正在将侦听器添加到按钮所在的布局中。请发布您的完整活动和 xml 文件。将侦听器设置为视图并不难(参见 Biraj Zalavadia 的回答),所以我认为您的代码中可能存在另一个问题。

标签: java android android-fragments onitemclicklistener


【解决方案1】:

您不能将片段的侦听器直接放到 MainActivity.class 中,因为创建的视图由片段拥有,而片段由活动动态拥有,对吗?所以我也遇到了同样的情况,我这样解决:

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;
    }
}

【讨论】:

  • 嘿比拉杰。我尝试了您的解决方案,但它似乎不起作用。但在尝试中,我发现我的问题比这更深。即使是在获得 View 之后精确定义的常规点击侦听器也无法正常工作。有什么我应该调查的吗???该死的听众只是没有记录点击。
猜你喜欢
  • 2019-04-08
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多