onclicklistener无法使用导航抽屉中的片段

时间:2017-09-15 23:09:43

标签: android fragment onclicklistener

我无法弄清楚我做错了什么。我有一个导航抽屉设置,当我点击导航抽屉中的一个项目时,它加载一个列表视图的片段,我用适配器定制。那部分有效。

但我在该片段中添加了一个onclicklistener,点击后我想加载一个新片段。但当我点击列表视图中的某个项目时,没有任何反应。 这是我的代码。

这是EventsFragment.java,这是加载自定义列表视图的内容。

package org.nctta.nctta_tournaments.fragments;

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.AdapterView;

import org.nctta.nctta_tournaments.R;
import org.nctta.nctta_tournaments.Tournament;
import org.nctta.nctta_tournaments.TournamentAdapter;

import java.util.ArrayList;

/**
 * Created by John on 9/10/2017.
 */

public class EventsFragment extends Fragment {

public EventsFragment() {
    //Required empty public constructor
}

View myView;

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

    //create a list of tournaments for testing
    final ArrayList<Tournament> Tournaments = new ArrayList<Tournament>();
        Tournaments.add(new Tournament("1","Ohio East Fall Tournament","1/1/2017", "1/1/2017","University of Akron"));
        Tournaments.add(new Tournament("2","Ohio West Fall Tournament","1/1/2017", "1/1/2017","Ohio State University"));
        Tournaments.add(new Tournament("3","Upper Midwest Fall Tournament","1/1/2017", "1/1/2017","University of Iowa"));
        Tournaments.add(new Tournament("4","Central Plains Fall Tournament","1/1/2017", "1/1/2017","Univeristy of Centeral Plains"));
        Tournaments.add(new Tournament("5","Lower Midwest Fall Tournament","1/1/2017", "1/1/2017","Lindenwood University"));
        Tournaments.add(new Tournament("6","Midwest Regional Tournament","1/1/2017", "1/1/2017","Lindenwood University"));
        Tournaments.add(new Tournament("7","Great Lakes Regional Tournament","1/1/2017", "1/1/2017","Lindenwood University"));
        Tournaments.add(new Tournament("8","South Regional Tournament","1/1/2017", "1/1/2017","Lindenwood University"));

    //Create an Tournament Adapter
    TournamentAdapter adapter = new TournamentAdapter(getActivity(),Tournaments);

    //find the listview object in the view hierarchy
    ListView listView = (ListView) myView.findViewById(R.id.tourList);
    listView.setAdapter(adapter);

    //set a click listener to open tournament info page
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l){
            //get the tournament object at the given position the user clicked on
            Tournament tournament = Tournaments.get(position);
            //start tournamentactivity
            android.app.FragmentManager fragmentManager = getFragmentManager();

            fragmentManager.beginTransaction()
                        .replace(R.id.content_frame, new TournamentFragment())
                        .commit();
        }
    });
    return myView;
}
}

这是我的TournamentFragment,应该在点击某个项目时加载。这个片段我想加载一个带有标签的页面浏览器,我无法开始工作,所以现在我评论了这些东西。只是想让clicklistener先工作。

package org.nctta.nctta_tournaments.fragments;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import org.nctta.nctta_tournaments.R;

/**
 * Created by John on 9/15/2017.
 */

public class TournamentFragment extends Fragment {
View myView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    myView = inflater.inflate(R.layout.tournament_tabs, container,false);
/*
    //Find the view pager that will allow the user to swipe between fragments
    ViewPager viewPager = (ViewPager) myView.findViewById(R.id.viewpager);
    //create an adapter that knows which fragment should be shown on each page
    TournTabsAdapter adapter = new TournTabsAdapter(this, getChildFragmentManager());
    //set the adapter onto the view pager
    viewPager.setAdapter(adapter);
    //find the tab layout that shows the tabs
    TabLayout tabLayout = (TabLayout) myView.findViewById(R.id.tabs);
    // Connect the tab layout with the view pager. This will
    //   1. Update the tab layout when the view pager is swiped
    //   2. Update the view pager when a tab is selected
    //   3. Set the tab layout's tab names with the view pager's adapter's titles
    //      by calling onPageTitle()
    tabLayout.setupWithViewPager(viewPager);
*/
    return myView;
}

}

任何想法??

1 个答案:

答案 0 :(得分:0)

好的,在评论的帮助和一些谷歌搜索我想出如何让onclicklistener工作...不知道为什么我的帖子被downvoted ... 单击侦听器上的项目无法工作的主要原因是因为我的列表视图的自定义适配器包含一个imagebuttom。我最终做的是删除该监听器并在适配器内添加onclicklisteners。关键是要使用settag。

这是我的适配器代码。我点击了点击只是为了验证。

    `<VisualState x:Name="ControlPanelFadeOut">
     <Storyboard>
     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Windows.UI.Core.CoreCursor" Storyboard.TargetProperty="CoreCursorType">
     <DiscreteObjectKeyFrame KeyTime="0" Value="Hand" />
     </ObjectAnimationUsingKeyFrames>
     </Storyboard>
     </VisualState>`