我是android新手。我正在尝试创建一个应用程序,其中我在水平线上有三个imagebuttons
,在下面部分有片段,可以通过点击按钮来更改(与tinder android app相同)。我尝试过使用两个不同的片段,一个有三个图像按钮,另一个有下面的一个。然后我也尝试将gridview
用于图像,然后在下面的部分中进行分段。我也试过简单地使用图像和动态更改片段。我有不同的错误导致崩溃。我想知道的是如何以最有效的方式实现我的目标?
编辑:当我仅使用gridview
的图片或imagebuttons
的片段时,代码会关注。
package com.psycho.ayush.sahanubhooti_20;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.ImageButton;
import android.widget.Toast;
public class MainActivity extends FragmentActivity {
ImageButton ngosButton, profileButtton, donateButton;
NGOsFragment ngosFragment;
ProfileFragment profileFragment;
DonateFragment donateFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ngosButton = (ImageButton)findViewById(R.id.ngoButton);
profileButtton = (ImageButton)findViewById(R.id.profileButton);
donateButton = (ImageButton)findViewById(R.id.donateButton);
ngosButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentTransaction fragTrans = getSupportFragmentManager().beginTransaction();
fragTrans.add(R.id.fragment_container, ngosFragment);
fragTrans.addToBackStack(null);
fragTrans.commit();
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:id="@+id/fragment_container"
tools:context="com.psycho.ayush.sahanubhooti_20.MainActivity">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ngoButton"
android:src="@drawable/ngo"
android:background="@android:color/transparent" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/profileButton"
android:layout_gravity="center_horizontal|top"
android:src="@drawable/profile"
android:background="@android:color/transparent" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/donateButton"
android:layout_gravity="right|top"
android:src="@drawable/donate"
android:background="@android:color/transparent" />
</FrameLayout>
休息我有三个片段(NGOsFragment,DonateFragment和ProfileFragment),我没有改变。我没有在这里为其余按钮添加onclicklistener。
07-25 21:18:09.111 23385-23407/com.psycho.ayush.sahanubhooti_20 I/OpenGLRenderer: Initialized EGL, version 1.4
07-25 21:18:09.111 23385-23407/com.psycho.ayush.sahanubhooti_20 W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
07-25 21:18:18.321 23385-23385/com.psycho.ayush.sahanubhooti_20 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.psycho.ayush.sahanubhooti_20, PID: 23385
java.lang.NullPointerException: Attempt to write to field 'android.support.v4.app.FragmentManagerImpl android.support.v4.app.Fragment.mFragmentManager' on a null object reference
at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:418)
at android.support.v4.app.BackStackRecord.add(BackStackRecord.java:408)
at com.psycho.ayush.sahanubhooti_20.MainActivity$1.onClick(MainActivity.java:30)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19761)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5253)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
答案 0 :(得分:0)
在所有按钮上设置单击侦听器,并设置以下代码以在帧布局上设置不同的片段。框架布局ID是您在活动中设置的框架布局的资源ID,而Fragment类是您创建的要在单击图像按钮时调用的片段。
getSupportFragmentManager().beginTransaction().replace(R.id.frame layout id, Fragment class name).commit()