【问题标题】:How to add an onClickListener that would open a new activity to a Fragment activity如何向片段活动添加将打开新活动的 onClickListener
【发布时间】:2019-09-17 12:11:21
【问题描述】:

我是 android studio 的新手,所以我会尽力解释。 我使用片段制作了一个菜单,所以我的activity_home 是一个片段活动。在碎片化活动中,我创建了一个按钮,单击该按钮应打开一个新活动。

问题是我不知道如何在碎片活动中实现onClickListener

我学习的每个教程都是从一开始就完成的。 这是我的主要活动:

package com.example.relja.diplomskirad;


import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(false);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new home(), "Home");
        adapter.addFragment(new profil(), "Profil");
        adapter.addFragment(new mapa(), "Mapa");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }


}

这是我的主要 xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="fixed"
            app:tabGravity="fill"/>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"  />
</android.support.design.widget.CoordinatorLayout>

这是我想放置 onclick 监听器的 home.java:

package com.example.relja.diplomskirad;

import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;


public class home extends Fragment {

    public home() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

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

    }

}

这是按钮所在的主页 xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".home">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="80dp"
        android:orientation="vertical">
        <LinearLayout
            android:id="@+id/glavnaStranica1"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:orientation="horizontal"
            android:gravity="center">

            <ImageView
                android:id="@+id/logoSlika"
                android:layout_width="200dp"
                android:layout_height="200dp"
                android:src="@drawable/logo2"
                android:layout_gravity="center"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/glavnaStranica2"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:orientation="horizontal"
            android:gravity="center"
            android:layout_marginStart="30dp">

            <EditText
                android:id="@+id/search"
                android:layout_width="250dp"
                android:layout_height="38dp"
                android:hint="@string/search"
                android:background="@drawable/ivica"
                android:drawableLeft="@drawable/search"
                android:drawablePadding="10dp"
                android:inputType="text"
                />
            <Button
                android:id="@+id/dugme"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/dugme"
                />
        </LinearLayout>

        <Button
            android:id="@+id/dugmeLogin"
            android:layout_width="70dp"
            android:layout_height="40dp"
            android:text="@string/dugmeLogin"
            android:layout_gravity="end"
            android:layout_marginRight="10dp"
            android:onClick="loginLogin"
            style="?android:attr/borderlessButtonStyle"/>

    </LinearLayout>
</RelativeLayout>

【问题讨论】:

  • 如果你只是在你的片段中执行 onClickListener 然后在你的片段 ii 中写 onclicklistener 如果你想在你的父片段活动中点击你的片段,那么你需要使用回调。
  • 有一件事我不明白,这个问题每周都会出现两到三次,如何?为什么?

标签: java android xml button onclick


【解决方案1】:

你可以试试这个..这会有所帮助

 public class home extends Fragment {
       private Button btn_dumge_login;

        public home() {
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

        }

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

        }
@Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

         btn_dumge_login = view.findViewById(R.id.dumgeLogin)
           btn_dumge_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getActivity(), TestActivity.class) ;
                getActivity().startActivity(intent);
            }
        });
    }

}

【讨论】:

  • 欢迎兄弟..请接受我的回答并放弃投票,以便面临这个问题的人能够理解哪个正确并且有效
  • 我不能投票,因为我是新来的,它不会让我投票。但我接受了。
【解决方案2】:
View view = inflater.inflate(R.layout.your_layout_file, container, false);
view.findViewById(R.id.button_id).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
   getContext().startActivity(new Intent(getContext(), YourNewActivity.class));
});
return view;

您可以在 onCreateView() 方法的片段“主页”中使用此代码

【讨论】:

    【解决方案3】:

    您应该首先选择要从中导航的视图,例如,id 为 dugmeLogin 的 Button

    那么你的代码应该是这样的

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    
        View view = inflater.inflate(R.layout.activity_home, container, false);
    
        Button loginButton = view.findViewById(R.id.dugmeLogin);
    
        loginButton.setOnClickListener(v -> {
            // You code goes here
        });
        return view;
    
    
    }
    

    这是在你的 home.java 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-04-20
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多