簡體   English   中英

使用動態標簽頁時應用崩潰

[英]App crashes on second while using dynamic tabs

我正在嘗試創建和使用動態選項卡,但是如果我使用切換,添加或刪除選項卡,則該應用程序運行正常,但是一旦我嘗試選擇第二項操作,該應用程序就會崩潰。 我知道問題出在標簽代碼上,因為該應用在標簽部分之前運行良好

這是我的MainActivity.java:

package com.example.notepadxl;

import java.io.*;


import android.os.*;

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.*;
import android.app.ActionBar.Tab;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
//import android.content.pm.PackageManager;
import android.graphics.Typeface;
import android.view.*;
import android.widget.*;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("WorldReadableFiles")
public class MainActivity extends Activity {

    Typeface tf=Typeface.SERIF;
    int sty=Typeface.NORMAL;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


     public void onAddTab() {
            final ActionBar bar = getActionBar();
            final int tabCount = bar.getTabCount();
            final String text = "Tab " + tabCount;
            bar.addTab(bar.newTab()
                    .setText(text)
                    .setTabListener(new TabListener(new TabContentFragment(text))));
        }
     public void onRemoveTab() {
            final ActionBar bar = getActionBar();
            if(bar.getTabCount() > 0)
                bar.removeTabAt(bar.getTabCount() - 1);
        }
     public void onToggleTabs() {
            final ActionBar bar = getActionBar();
            if (bar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS) {
                bar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
                bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE, ActionBar.DISPLAY_SHOW_TITLE);
            } else {
                bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
                bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
            }
        }
     public void onRemoveAllTabs(View v) {
            getActionBar().removeAllTabs();
        }
     private class TabListener implements ActionBar.TabListener {
            private TabContentFragment mFragment;
            public TabListener(TabContentFragment fragment) {
                mFragment = fragment;
            }
            public void onTabSelected(Tab tab, FragmentTransaction ft) {

                ft.add(R.id.fragment_content, mFragment, mFragment.getText());
            }
            public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                ft.remove(mFragment);
            }
            public void onTabReselected(Tab tab, FragmentTransaction ft) {
                Toast.makeText(MainActivity.this, "Reselected!", Toast.LENGTH_SHORT).show();
            }
        }
        @SuppressLint("ValidFragment")
        private class TabContentFragment extends Fragment {
            private String mText;
            public TabContentFragment(String text) {
                mText = text;
            }
            public String getText() {
                return mText;
            }
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {
                View fragView = inflater.inflate(R.layout.activity_main, container, false);
                TextView text = (TextView) fragView.findViewById(R.id.text);
                text.setText(mText);
                return fragView;
            }
        }


    public void ChangeFont(View view) {
        Button b = (Button) findViewById(R.id.Font);
        PopupMenu popupMenu = new PopupMenu(MainActivity.this, b);
        popupMenu.getMenuInflater().inflate(R.menu.popupmenu,
                popupMenu.getMenu());

        popupMenu
                .setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    EditText text = (EditText) findViewById(R.id.TextBox);

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()) {
                        case R.id.menu1: {
                            tf=Typeface.SANS_SERIF;
                            text.setTypeface(tf,sty);
                            break;
                        }
                        case R.id.menu2: {
                            tf=Typeface.SERIF;
                            text.setTypeface(tf,sty);
                            break;
                        }
                        case R.id.menu3: {
                            tf=Typeface.MONOSPACE;
                            text.setTypeface(tf,sty);
                            break;
                        }
                        case R.id.menu4: {
                            tf = Typeface.createFromAsset(getAssets(),
                                    "Fonts/HandmadeTypewriter.ttf");
                            text.setTypeface(tf,sty);
                            break;
                        }
                        case R.id.menu5: {
                            tf = Typeface.createFromAsset(getAssets(),
                                    "Fonts/verdana.ttf");
                            text.setTypeface(tf,sty);
                            break;
                        }
                        case R.id.menu6: {
                            tf = Typeface.createFromAsset(getAssets(),
                                    "Fonts/times.ttf");
                            text.setTypeface(tf,sty);
                            break;
                        }
                        case R.id.menu7: {
                            tf = Typeface.createFromAsset(getAssets(),
                                    "Fonts/babe bamboo.ttf");
                            text.setTypeface(tf,sty);
                            break;
                        }
                        case R.id.menu8: {
                            tf = Typeface.createFromAsset(getAssets(),
                                    "Fonts/O_Connor.ttf");
                            text.setTypeface(tf,sty);
                            break;
                        }
                        case R.id.menu9: {
                            tf = Typeface.createFromAsset(getAssets(),
                                    "Fonts/OBLIVIOUSFONT.TTF");
                            text.setTypeface(tf,sty);
                            break;
                        }
                        default: {
                            break;
                        }
                        }
                        return true;
                    }
                });

        popupMenu.show();
    }

    public void ChangeStyle(View view) {
        Button b = (Button) findViewById(R.id.Style);
        PopupMenu popupMenu = new PopupMenu(MainActivity.this, b);
        popupMenu.getMenuInflater().inflate(R.menu.stylemenu,
                popupMenu.getMenu());

        popupMenu
                .setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    EditText text = (EditText) findViewById(R.id.TextBox);

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()) {
                        case R.id.type1: {
                            sty=Typeface.ITALIC;
                            text.setTypeface(tf, sty);
                            break;
                        }
                        case R.id.type2: {
                            sty=Typeface.BOLD;
                            text.setTypeface(tf, sty);
                            break;
                        }
                        case R.id.type3: {
                            sty=Typeface.BOLD_ITALIC;
                            text.setTypeface(tf, sty);
                            break;
                        }
                        case R.id.type4: {
                            sty=Typeface.NORMAL;
                            text.setTypeface(tf, sty);
                            break;
                        }
                        default: {
                            break;
                        }
                        }
                        return true;
                    }
                });

        popupMenu.show();
    }

    public void ChangeSize(View view) {
        Button b = (Button) findViewById(R.id.Size);
        PopupMenu popupMenu = new PopupMenu(MainActivity.this, b);
        popupMenu.getMenuInflater().inflate(R.menu.sizemenu,
                popupMenu.getMenu());

        popupMenu
                .setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    EditText text = (EditText) findViewById(R.id.TextBox);

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()) {
                        case R.id.size1: {
                            text.setTextSize(14);
                            break;
                        }
                        case R.id.size2: {
                            text.setTextSize(16);
                            break;
                        }
                        case R.id.size3: {
                            text.setTextSize(18);
                            break;
                        }
                        case R.id.size4: {
                            text.setTextSize(20);
                            break;
                        }
                        case R.id.size5: {
                            text.setTextSize(22);
                            break;
                        }
                        case R.id.size6: {
                            text.setTextSize(24);
                            break;
                        }
                        case R.id.size7: {
                            text.setTextSize(26);
                            break;
                        }
                        case R.id.size8: {
                            text.setTextSize(28);
                            break;
                        }
                        default: {
                            break;
                        }
                        }
                        return true;
                    }
                });

        popupMenu.show();
    }

    public synchronized void onActivityResult(final int requestCode,
            int resultCode, final Intent data) {
        EditText text = (EditText) findViewById(R.id.TextBox);
        if (resultCode == Activity.RESULT_OK) {
            if(requestCode==0){
            String filePath = data.getStringExtra(FileDialog.RESULT_PATH);
            File file = new File(filePath);
            StringBuilder info = new StringBuilder();
            try {
                BufferedReader br = new BufferedReader(new FileReader(file));
                String line;
                while ((line = br.readLine()) != null) {
                    info.append(line);
                    info.append('\n');
                }
                text.setText(info);
                br.close();

            } catch (IOException e) {
                // You'll need to add proper error handling here
            }
            }
            else if(requestCode==1){
                String filePath = data.getStringExtra(FileDialog.RESULT_PATH);
                File file = new File(filePath);

                FileOutputStream fos;


                byte[] data1 = text.getText().toString().getBytes();


                try {

                    fos = new FileOutputStream(file);
                    fos.write(data1);
                    fos.flush();
                    fos.close();
                } catch (FileNotFoundException e) {
                    // handle exception
                } catch (IOException e) {

                    // handle exception

                }
            }
        } else if (resultCode == Activity.RESULT_CANCELED) {
            text.setText("file not selected");
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options, menu);
        return super.onCreateOptionsMenu(menu);
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

        case R.id.item1:
            Intent intent = new Intent(getBaseContext(), FileDialog.class);
            intent.putExtra(FileDialog.START_PATH, "/sdcard");
            intent.putExtra(FileDialog.CAN_SELECT_DIR, true);
            startActivityForResult(intent, 0);
            break;
        case R.id.item2:
            Intent intent1 = new Intent(getBaseContext(), FileDialog.class);
            intent1.putExtra(FileDialog.START_PATH, "/sdcard");
            intent1.putExtra(FileDialog.CAN_SELECT_DIR, true);
            startActivityForResult(intent1, 1);
            break;
        case R.id.item3:
            Context context = this;
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
            alertDialog.setTitle("NEW");
            alertDialog.setMessage("Do you wish to save the file");
            alertDialog.setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            Intent intent = new Intent(getBaseContext(),
                                    FileDialog.class);
                            intent.putExtra(FileDialog.START_PATH, "/sdcard");
                            intent.putExtra(FileDialog.CAN_SELECT_DIR, true);
                            startActivityForResult(intent, 1);
                            EditText text = (EditText) findViewById(R.id.TextBox);
                            text.setText("");
                        }
                    });
            alertDialog.setNegativeButton("No",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            EditText text = (EditText) findViewById(R.id.TextBox);
                            text.setText("");
                        }
                    });
            alertDialog.show();

            Toast.makeText(getApplicationContext(), "New file",
                    Toast.LENGTH_SHORT).show();
            break;
        case R.id.item4:
            onAddTab();
            break;
        case R.id.item5:
            onRemoveTab();
            break;
        case R.id.item6:
            onToggleTabs();
            break;
        default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }
}

這是logcat:

03-04 18:55:19.229: E/AndroidRuntime(20619): FATAL EXCEPTION: main
03-04 18:55:19.229: E/AndroidRuntime(20619): java.lang.NullPointerException
03-04 18:55:19.229: E/AndroidRuntime(20619):    at com.example.notepadxl.MainActivity$TabContentFragment.onCreateView(MainActivity.java:178)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at android.app.BackStackRecord.run(BackStackRecord.java:622)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at android.os.Handler.handleCallback(Handler.java:605)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at android.os.Looper.loop(Looper.java:137)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at android.app.ActivityThread.main(ActivityThread.java:4441)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at java.lang.reflect.Method.invokeNative(Native Method)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at java.lang.reflect.Method.invoke(Method.java:511)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-04 18:55:19.229: E/AndroidRuntime(20619):    at dalvik.system.NativeStart.main(Native Method)

stacktrace表示onCreateView()有一個NPE:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View fragView = inflater.inflate(R.layout.activity_main, container, false);
    TextView text = (TextView) fragView.findViewById(R.id.text);
    text.setText(mText);
    return fragView;
}

您的activity_main布局似乎不包含帶有ID text的視圖。

請檢查activity_main是否具有ID為text的元素。 顯然它不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM