我刚开始使用片段和滑动视图。 我想重做我的项目,但是通过onClickListener()方法设置与按钮和图像的各种交互有问题
这是带有按钮(activity_extra.xml)的片段/活动的xml代码:
<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:background="@color/rhinos" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:orientation="vertical"
android:paddingBottom="20dip" >
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/fb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/facebook_icon"
android:contentDescription="@string/link_facebook" />
<ImageView
android:id="@+id/tw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/twitter_icon"
android:contentDescription="@string/link_twitter" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
这是Extra类的代码(应该使用extra_activity按钮的类):
public class Extra extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// immagini extra
View view = inflater.inflate(R.layout.activity_extra, container, false);
ImageView fb = (ImageView) view.findViewById(R.id.fb);
ImageView tw = (ImageView) view.findViewById(R.id.tw);
fb.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(
Intent.ACTION_VIEW,
Uri.parse("https://www.facebook.com/"));
startActivity(intent);
}
});
tw.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri
.parse("https://twitter.com/"));
startActivity(intent);
}
});
return view;
/*
* fb.setOnClickListener(this);
* tw.setOnClickListener(this);
*/
}
/*
* @Override public void onClick(View v) { Intent intent = null; switch
* (view.getId()) {
*
* case R.id.fb: intent = new Intent( Intent.ACTION_VIEW,
* Uri.parse("https://www.facebook.com/"));
* case R.id.tw: intent = new Intent(Intent.ACTION_VIEW,
* Uri.parse("https://twitter.com/"));
* }
* startActivity(intent);
* }
*/
}
如果使用implements构建,那么带*的部分关注类:
public class Extra extends Fragment implements OnClickListener{
我认为缺少某些东西才能让它发挥作用,但是什么呢? 阅读各种指南和教程真的不明白我还需要进一步实施。
添加MainActivity:
public class MainActivity extends FragmentActivity {
Button b1,b2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button) findViewById(R.id.button1);
b2 = (Button) findViewById(R.id.button2);
b1.setOnClickListener(new OnClickListener() {
Fragment fragment = new Extra();
//Extra fragment = new Extra();
public void onClick(View v) {
FragmentTransaction transaction = getFragmentManager()
.beginTransaction();
transaction.replace(android.R.id.content, fragment);
transaction.commitAllowingStateLoss();
}
});
b2.setOnClickListener(new OnClickListener() {
Fragment fragment = new FrammentoSinistra();
//FrammentoSinistra fragment = new FrammentoSinistra();
public void onClick(View v) {
FragmentTransaction transaction = getFragmentManager()
.beginTransaction();
transaction.replace(android.R.id.content, fragment);
transaction.commitAllowingStateLoss();
}
});
}
}
只需根据按下的按钮加载框架即可。 除了它的xml文件,我没有其他代码......那么缺少什么?
正如我上面写的那样:
这说明了我的应用程序:确定片段已加载。现在片段必须做他说的extra.java类!
答案 0 :(得分:2)
您正在扩展FragmentActivity
(公共类额外扩展FragmentActivity
)。 FragmentActivity
是Activity
,并且没有onCreateView
方法。如果您想使用FragmentActivity
,建议您将代码放入onCreate
方法。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ImageView fb = (ImageView) findViewById(R.id.fb);
ImageView tw = (ImageView) findViewById(R.id.tw);
fb.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(
Intent.ACTION_VIEW,
Uri.parse("https://www.facebook.com/"));
startActivity(intent);
}
});
tw.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri
.parse("https://twitter.com/"));
startActivity(intent);
}
});
}
如果您需要Fragment
,请将您的课程扩展到Fragment
(public class Extra extends Fragment
)。你的onCreateView
方法没问题。只需在方法上添加@Override
即可。并确保您拥有Activity
类,其中包含Fragment
。如需参考,请尝试此链接http://www.tutorialspoint.com/android/android_fragments.htm
答案 1 :(得分:0)
单击图像时,您的行为是否没有任何反应?作为&#34;按钮&#34;被定义为您需要打开可点击的图像视图(setClickable(true))。
你的片段也应该扩展Fragment类,FragmentActivity是包含片段的活动;请参阅docs,否则将无法调用正确的生命周期方法。