为什么 setOnClickListener 不适用于充气按钮?
why setOnClickListener not working for inflated button?
我是初学者,我正在为 tab_fragment.xml
中的按钮充气,当我尝试将 setOnClickListener 设置到该按钮时,它不起作用
LayoutInflater inflater=getLayoutInflater();
View v=inflater.inflate(R.layout.tab_fragment, (ViewGroup) findViewById(R.id.line1));
Button button= (Button) v.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFrag(new Tab(), "two");
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
});
这是我的
tab_fragment.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/line1"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_margin="50dp"
android:text="some text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
片段 class 中应该有这样的内容:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_fragment, container, false);
Button button = (Button) v.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFrag(new Tab(), "two");
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
});
return v;
}
好的。知道了。该按钮是片段布局的一部分。所以您在 activity class 中没有按钮的实例。如果您想处理 activity class 上的按钮单击行为,您可以让 activity 实现 OnClickListener。然后像这样覆盖片段中的 onAttach() 方法:
@Override
public void onAttach(Context activity) {
super.onAttach(activity);
if(activity instanceof OnClickListener)
mListener = (OnClickListener) activity;
}
}
@Override
public void onDetach() {
mListener = null;
super.onDetach();
}
然后在 onCreateView 方法上:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_fragment, container, false);
Button button = (Button) v.findViewById(R.id.button);
button.setOnClickListener(mListener);
return v;
}
此外,从 activity 的 onClick() 中移动 onClick(来自片段)的逻辑,如下所示:
Override
public void onClick(View view) {
switch (view.getId() == R.id.button) {
// move your logic here
}
}
我是初学者,我正在为 tab_fragment.xml
中的按钮充气,当我尝试将 setOnClickListener 设置到该按钮时,它不起作用
LayoutInflater inflater=getLayoutInflater();
View v=inflater.inflate(R.layout.tab_fragment, (ViewGroup) findViewById(R.id.line1));
Button button= (Button) v.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFrag(new Tab(), "two");
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
});
这是我的 tab_fragment.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/line1"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_margin="50dp"
android:text="some text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
片段 class 中应该有这样的内容:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_fragment, container, false);
Button button = (Button) v.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFrag(new Tab(), "two");
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
});
return v;
}
好的。知道了。该按钮是片段布局的一部分。所以您在 activity class 中没有按钮的实例。如果您想处理 activity class 上的按钮单击行为,您可以让 activity 实现 OnClickListener。然后像这样覆盖片段中的 onAttach() 方法:
@Override
public void onAttach(Context activity) {
super.onAttach(activity);
if(activity instanceof OnClickListener)
mListener = (OnClickListener) activity;
}
}
@Override
public void onDetach() {
mListener = null;
super.onDetach();
}
然后在 onCreateView 方法上:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_fragment, container, false);
Button button = (Button) v.findViewById(R.id.button);
button.setOnClickListener(mListener);
return v;
}
此外,从 activity 的 onClick() 中移动 onClick(来自片段)的逻辑,如下所示:
Override
public void onClick(View view) {
switch (view.getId() == R.id.button) {
// move your logic here
}
}