我已按照本教程在活动http://www.androidhive.info/2015/09/android-material-design-working-with-tabs/
中创建了一个很好的标签但它使用Fragment并且在片段中不可能使用任何正常的代码:
Toast.makeText(this, "Error...", Toast.LENGTH_LONG).show();
或单击一个简单按钮
btnSum =(Button)findViewById(R.id.button4);
btnSum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAuthTask = new TaskAsincrono();
mAuthTask.execute((Void) null);
}
});
Fragment上没什么可行的,可能吗?
我需要标签,因为活动有多个功能,结果很好但是在级别代码没有,1片段有登录按钮,文字但是如果我打电话按钮点击不工作ex:
Button btnSum =(Button)findViewById(R.id.button4);
btnSum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
片段Tab2:
<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"
android:id="@+id/tab2"
tools:context="net.appsite.Tab2">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="Name"
android:ems="10"
android:layout_x="49dp"
android:layout_y="226dp"
android:id="@+id/editText8"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="59dp" />
<Button
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button3"
android:layout_x="114dp"
android:layout_y="280dp"
android:elevation="0dp"
android:layout_marginTop="42dp"
android:layout_below="@+id/editText8"
android:layout_centerHorizontal="true" />
</RelativeLayout>
Tab2.jar:
public class Tab2 extends Fragment{
public Tab2() {
// Required empty public constructor
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//ANY NORMAL CODE HERE NOT WORK, BUT IN NORMAL ACTIVITY WORK!
Toast.makeText(this, "Error...", Toast.LENGTH_LONG).show();
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_tab2, container, false);
}
}
这是我第一次使用android,请帮助我。
答案 0 :(得分:2)
使用活动上下文显示Toast
要将点击监听器添加到Button
,请使用片段view.findviewByID()
你的Fragment类看起来应该是这样的:
public class Tab2 extends Fragment{
View view;
public Tab2() {
// Required empty public constructor
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//ANY NORMAL CODE HERE NOT WORK, BUT IN NORMAL ACTIVITY WORK!
Toast.makeText(getActivity(), "Error...", Toast.LENGTH_LONG).show(); //use activity context
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view =inflater.inflate(R.layout.fragment_tab2, container, false);
Button btnSum =(Button)view.findViewById(R.id.button3); // get Button with the view object
btnSum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
return view;
}
}
答案 1 :(得分:2)
在Fragment中“这个”不起作用,你必须获得像“getActivity()”这样的父活动的上下文,或者将上下文从活动传递到片段。
您的代码就像这样
Toast.makeText(getActivity(), "Error...", Toast.LENGTH_LONG).show();
Tab2活动如下所示:
public class Tab2 extends Fragment{
private View mRootView;
public Tab2() {
// Required empty public constructor
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mRootView= inflater.inflate(R.layout.fragment_tab2, container,false);
Button btnSum =(Button)mRootView.findViewById(R.id.button4);
btnSum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Your action goes here
}
});
}
}
答案 2 :(得分:1)
在getActivity().findViewById(..)
Toast.makeText(getActivity(), "Error...", Toast.LENGTH_LONG).show();
和Fragment
这是因为在findViewById
上定义了Context
,而Toast
要求第一个参数为Context
。由于Activity
间接延伸Context
,因此可行。但是在Fragment
中你需要得到上下文。一种方法是在getActivity()
中执行Fragment
。
答案 3 :(得分:1)
Fragment
与Activity
不完全相同,请参阅docs了解详情
另外Fragment
不是Context
,请参阅更多信息here因此,在传递this
时您无法使用Context
,而是使用getActivity()
:
getApplicationContext()
或
onViewCreated
还需要在you_fragment public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view =inflater.inflate(R.layout.fragment_tab2, container, false);
Button btnSum =(Button)view.findViewById(R.id.button4);
// note that button4 should be existing in fragment_tab2
btnSum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
// other views binding code
// and other code
return view;
}
方法中完成绑定视图:
hotelregionid