如何从片段中的图像按钮盯着活动获取操作栏?

时间:2015-06-16 16:51:44

标签: android android-fragments android-actionbar

我正在尝试向一个活动添加一个操作栏,该活动是从片段内的ImageButton中调出来的。我添加了代码,但点击图片按钮后我的app力就会关闭。

abcd.java

package hind.jai.com.jaihind;

import android.app.Activity;
import android.os.Bundle;
import android.app.ActionBar;


/**
 * Created by Rishik on 14-06-2015.
 */
public class abcd extends Activity{
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.abcd);
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

android manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="hind.jai.com.jaihind" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
       <!-- <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity> -->
        <activity
            android:name=".splash"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Black.NoTitleBar"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"

            ></activity>
        <activity

             android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
            android:name=".abcd" ></activity>
    </application>

</manifest>

abcd.xml

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/textView9"
        android:layout_gravity="center_vertical" />
</LinearLayout>

about.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/about"
    android:id="@+id/textView"
    android:layout_gravity="center_horizontal" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageButton"
        android:background="@drawable/image2"
        android:onClick="Onclick"
        android:layout_gravity="center_horizontal" />


</LinearLayout>

about.java

package hind.jai.com.jaihind;

import android.app.ActionBar;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTabHost;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;

/**
 * Created by sukhvir on 17/04/2015.
 */
public class about extends android.support.v4.app.Fragment {
    ImageButton Img;

    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {


        return inflater.inflate(
                R.layout.about, container, false);


    }

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

        //get the button view
        Img = (ImageButton) getView().findViewById(R.id.imageButton);
        //set a onclick listener for when the button gets clicked
        Img.setOnClickListener(new View.OnClickListener() {
            //Start new list activity
            public void onClick(View v) {
                Intent Intent = new Intent(getActivity(), abcd.class);
                startActivity(Intent);

            }
        });


    }

}

这个“关于”是我通过图像按钮开始活动“abcd”的片段。

3 个答案:

答案 0 :(得分:0)

尝试使用getSupportActionBar()而不是getActionBar()方法。

试试此代码

package hind.jai.com.jaihind;

import android.app.Activity;
import android.os.Bundle;
import android.app.ActionBar;
import android.support.v7.app.ActionBarActivity

/**
 * Created by Rishik on 14-06-2015.
 */
public class abcd extends Activity{
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.abcd);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

希望有所帮助

答案 1 :(得分:0)

您可以通过在片段内的任何位置执行getActivity()来访问片段中的所有活动方法。 因此,要访问操作栏,请执行

getActivity().getActionBar();

或者,如果您使用的是较新的appcompat活动和工具栏,

((AppCompatActivity)getActivity()).getSupportActionBar();

你的问题不明确,但希望这就是你要找的。

答案 2 :(得分:0)

如果你可以分享你的堆栈跟踪,那将真正有助于确定究竟是什么导致了问题。

尽管如此,我认为你得到 NullPointerException 异常,因为 getActionBar()在你的情况下返回null,因为你将活动主题设置为

  

Theme.AppCompat.Light.DarkActionBar

对应支持库。

尝试从 AppCompatActivity 扩展您的活动,然后使用getSupportActionBar()方法获取操作栏。

您还应该将操作栏从导入 android.app.ActionBar 更改为 android.support.v7.app.ActionBar

代码:

package hind.jai.com.jaihind;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.app.ActionBar;

/**
  * Created by Rishik on 14-06-2015.
*/
public class abcd extends AppCompatActivity{
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.abcd);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    }
}