【问题标题】:OnClickListener of a fragment is getting fired in another fragment too片段的 OnClickListener 也在另一个片段中被触发
【发布时间】:2014-07-13 08:29:56
【问题描述】:

我正在实现可滑动的选项卡。我有 3 个选项卡。在最后一个选项卡中有 4 个按钮,单击它们将启动另一个片段活动。但是当我单击第二个选项卡中的可用空间时,会触发相同的 onclick。请帮助我这个问题。

这是我的完整项目链接https://drive.google.com/file/d/0B3znk-VNWY6RUHVvdDBpNWlmN3M

AlbumsFragment

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

public class AlbumsFragment extends Fragment implements OnClickListener {

    View view;
    Button albums,songs,artists,playlist;
    Activity thisActivity;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        view=inflater.inflate(R.layout.fragment_albums, container,false);
        thisActivity=getActivity();
        albums=(Button) view.findViewById(R.id.btn_albums);
        songs=(Button) view.findViewById(R.id.btn_allsongs);
        artists=(Button) view.findViewById(R.id.btn_artists);
        playlist=(Button) view.findViewById(R.id.btn_playlist);
        albums.setOnClickListener(AlbumsFragment.this);
        songs.setOnClickListener(AlbumsFragment.this);
        artists.setOnClickListener(AlbumsFragment.this);
        playlist.setOnClickListener(AlbumsFragment.this);

        return view;
    }


    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.btn_albums:

            Toast.makeText(thisActivity, "in", 100).show();
            Intent i=new Intent(thisActivity,PlayList.class);
            thisActivity.startActivity(i);
            thisActivity.overridePendingTransition(R.anim.flip_left_to_right, R.anim.flip_right_to_left);


            break;

        default:
            break;
        }

    }

}

这个 onclicklistener 在相邻片段中被触发。

RecorderFragment

package com.krazzyplayer;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.SearchManager;
import android.content.ComponentName;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.SearchView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

public class RecordFragment extends Fragment {

    View view;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        view=inflater.inflate(R.layout.fragment_audio_recorder, container, false);

        return view;
    }



}

【问题讨论】:

  • 你描述的不可能。发布您的“相邻”Fragment 的代码。
  • 看到这个东西我也被吓到了,请给点建议
  • 这看起来不可能。尝试为您的资源元素提供不同的 id(尽管这无关紧要,我会先尝试)
  • 我正在维护不同的 ID
  • 发布你的碎片布局。

标签: android android-fragments android-tabs


【解决方案1】:

对不可见的片段禁用 onClick 方法。为此,请添加此代码-

if(!getUserVisibleHint())
{return false;}

在每个片段的OnClick方法的第一行之前,如果片段不可见,则不会执行OnClick方法。

【讨论】:

  • if (getUserVisibleHint()) { albums.setOnClickListener(AlbumsFragment.this); song.setOnClickListener(AlbumsFragment.this);艺术家.setOnClickListener(AlbumsFragment.this); playlist.setOnClickListener(AlbumsFragment.this);我确实喜欢这个。如果我单击该选项卡的特定选项卡,则 onclick 事件会成功触发,但是当我滚动浏览剩余的片段时,即使在其自己的片段中,onclick 事件也不会被触发。@user1517029
  • 请按照建议将代码放入 onClickMethod() 并尝试。您正在做其他事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多