应用程序崩溃当试图通过点击按钮来更改TextView的TEXTSIZE [英] App Crash When Trying to Change textsize in textView by clicking on button

查看:265
本文介绍了应用程序崩溃当试图通过点击按钮来更改TextView的TEXTSIZE的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的一个活动,我有一个菜单选项文本选项当用户点击这个重定向到另一个布局,我养了两个按钮之一的加号按钮,另外一个就是减号按钮

当用户点击该按钮我要改变BackStack活动的TextView的文本大小

下面是我的code下面当我点击MenuOPtion这个应用程序崩溃,它报告的 NullPointerException异常在logcat中

我的详细活动

  @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.detail_activity); detailtext =(的TextView)findViewById(R.id.detail);
 dbHelper =新SqlLiteDbHelper(本);
        尝试{
            dbHelper.openDataBase();
        }赶上(的SQLException E){
            e.printStackTrace();
        }        sqLiteDatabase = dbHelper.getReadableDatabase();
        光标= dbHelper.getdetails(sqLiteDatabase,selectedData);        如果(cursor.moveToFirst())
        {            detailtext.setText(cursor.getString(0));
        }@覆盖
    公共布尔onOptionsItemSelected(菜单项项){
 INT ID = item.getItemId();
 如果(ID == R.id.text_option)
        {
           意向意图=新意图(这一点,CustomSetting.class);
            startActivity(意向);        }
返回super.onOptionsItemSelected(项目);
    }

Detail_menu.xml

 <项目机器人:ID =@ + ID / text_option
        机器人:orderInCategory =100
        机器人:showAsAction =ifRoom
        机器人:标题=文本选项
         />

CustomSetting.java

 公共类CustomSetting扩展AppCompatActivity {    DetailActivity detailActivity;
    ImageButton的加,减,关闭;
    INT txtSize = 14;
    TextView的细节= detailActivity.detailtext;
 @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.custom_setting);
        加上=(的ImageButton)findViewById(R.id.plus);
        减去=(的ImageButton)findViewById(R.id.minus);
        接近=(的ImageButton)findViewById(R.id.close);plus.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                如果(detail.getTextSize()== 14 || detail.getTextSize()== 15 || detail.getTextSize()== 16 || detail.getTextSize()== 17){
                    txtSize ++;
                    detail.setTextSize(txtSize);
                }否则如果(detail.getTextSize()== 18){
                    txtSize + = 0;
                    detail.setTextSize(txtSize);
                }其他{
                    txtSize + = 0;
                    detail.setTextSize(txtSize);
                }            }
        });
        minus.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                如果(detail.getTextSize()== 15 || detail.getTextSize()== 16 || detail.getTextSize()== 17 | detail.getTextSize()== 18){
                    txtSize--;
                    detail.setTextSize(txtSize);
                }其他{
                    txtSize + = 0;
                    detail.setTextSize(txtSize);
                }            }
        });
        close.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                意向意图=新意图(CustomSetting.this,DetailActivity.class);
                startActivity(意向);
            }
        });    }

custom_setting.xml

 <的ImageButton
    机器人:layout_width =50dp
    机器人:layout_height =40dp
    机器人:背景=@绘制/关闭
    机器人:layout_above =@ + ID / TextView的
    机器人:layout_toRightOf =@ + ID /负
    机器人:layout_toEndOf =@ + ID /负
    机器人:ID =@ + ID /关闭
    />
    <的ImageButton
        机器人:layout_width =50dp
        机器人:layout_height =40dp
        机器人:背景=@绘制/ plusign
        机器人:layout_marginTop =110dp
        机器人:ID =@ + ID /加
        机器人:layout_alignParentTop =真
        机器人:layout_alignLeft =@ + ID / TextView的
        机器人:layout_alignStart =@ + ID / TextView的/>
    <的ImageButton
        机器人:layout_width =50dp
        机器人:layout_height =40dp
        机器人:背景=@绘制/ minusign
        机器人:ID =@ + ID /负
        机器人:layout_alignTop =@ + ID /加
        机器人:layout_alignRight =@ + ID / TextView的
        机器人:layout_alignEnd =@ + ID / TextView的/>    <的TextView
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:textAppearance =机器人:ATTR / textAppearanceLarge
        机器人:文本=更改文字大小
        机器人:ID =@ + ID / TextView的
        机器人:layout_above =@ + ID /负
        机器人:layout_centerHorizo​​ntal =真
        机器人:文字颜色=#FFFFFF
        />

logcat的:

 流程:com.example.aa.sidd,PID:23413
    了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.aa.sidd / com.example.aa.sidd.CustomSetting}:android.view.InflateException:二进制XML文件行#17:错误充气类<&不明GT ;
            在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2436)
            在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2498)
            在android.app.ActivityThread.access $ 900(ActivityThread.java:179)
            在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1324)
            在android.os.Handler.dispatchMessage(Handler.java:102)
            在android.os.Looper.loop(Looper.java:146)
            在android.app.ActivityThread.main(ActivityThread.java:5641)
            在java.lang.reflect.Method.invokeNative(本机方法)
            在java.lang.reflect.Method.invoke(Method.java:515)
            在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1288)
            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1104)
            在dalvik.system.NativeStart.main(本机方法)
     android.view.InflateException:引起二进制XML文件行#17:错误充气类<&不明GT;
            在android.view.LayoutInflater.createView(LayoutInflater.java:626)


解决方案

显示在DialogFragment的形式,新的布局。我们的想法是,以显示在一DialogFragment弹出的形式的增加/减少选项。你可以从弹出的增加/减少的大小。一旦弹出驳回选定的大小设置为TextView的在你的活动。

MainActivity.java

 公共类MainActivity扩展AppCompatActivity {公共静态INT updatedSize;
TextView的greetingText;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    greetingText =(的TextView)findViewById(R.id.hello_world_text);
}@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
    //充气菜单;如果是present这增加了项目操作栏。
    。getMenuInflater()膨胀(R.menu.menu_main,菜单);
    返回true;
}@覆盖
公共布尔onOptionsItemSelected(菜单项项){
    INT ID = item.getItemId();
    如果(ID == R.id.action_settings){
        mycustomLayout();
        返回true;
    }    返回super.onOptionsItemSelected(项目);
}公共无效mycustomLayout(){
    FragmentManager经理= getFragmentManager();
    弹出式弹出=新弹出(新FragmentDismissHandler());
    popUp.show(经理,弹出);}公共无效refreshText(){
    如果(updatedSize大于0)
    greetingText.setTextSize(updatedSize);
}私有类FragmentDismissHandler扩展了Handler {
    @覆盖
    公共无效的handleMessage(消息MSG){
        super.handleMessage(MSG);
        refreshText();
    }
}}

PopUp.java(自定义布局DialogFragment)

 公共类弹出式扩展DialogFragment实现View.OnClickListener {的ImageButton增加,减少,集;
TextView的sizeOfText;
静态INT大小;
处理程序处理程序;
公共弹出式(处理程序处理){
    this.handler =处理程序;
}
公共弹出式(){}
@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
                         捆绑savedInstanceState){
    //充气的布局该片段
    getDialog()的setTitle(改变文字大小);
    查看查看= inflater.inflate(R.layout.my_custom_layout,集装箱,FALSE);    增加=(的ImageButton)view.findViewById(R.id.inc);
    increase.setOnClickListener(本);    减少=(的ImageButton)view.findViewById(R.id.dec);
    decrease.setOnClickListener(本);    sizeOfText =(TextView中)view.findViewById(R.id.size_text);
    sizeOfText.setText(文本);    设置=(的ImageButton)view.findViewById(R.id.ok);
    set.setOnClickListener(本);    大小=(int)的sizeOfText.getTextSize();    返回视图。
}
@覆盖
公共无效的onClick(查看视图){
    INT ID = view.getId();    如果(ID == R.id.inc){
        大小= +1;
        sizeOfText.setText(文本);
        sizeOfText.setTextSize(大小);
    }
    如果(ID == R.id.dec){
        大小= - 1;
        sizeOfText.setText(文本);
        sizeOfText.setTextSize(大小);
    }
    如果(ID == R.id.ok){
        解雇();
    }
}@覆盖
公共无效onDismiss(DialogInterface对话){
    super.onDismiss(对话);
    MainActivity.updatedSize =大小;
    handler.sendEmptyMessage(0);
}}

In One Of my Activity I have a Menu Option With Text Option When user Click That it redirect to Another Layout where I Kept Two Buttons one is Plus Button and Another One is Minus Button

When user Click that Button I want to Change The TextView Text Size of the BackStack Activity

Here is My Code Below When i click that MenuOPtion the App was Crash and it Report NullPointerException in Logcat

My Detail Activity

@Override
    protected void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.detail_activity);

 detailtext= (TextView) findViewById(R.id.detail);
 dbHelper = new SqlLiteDbHelper(this);
        try {
            dbHelper.openDataBase();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        sqLiteDatabase = dbHelper.getReadableDatabase();
        cursor=dbHelper.getdetails(sqLiteDatabase, selectedData);

        if(cursor.moveToFirst())
        {

            detailtext.setText(cursor.getString(0));
        }

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
 int id = item.getItemId();
 if (id==R.id.text_option)
        {
           Intent intent= new Intent(this,CustomSetting.class);
            startActivity(intent);

        }
return super.onOptionsItemSelected(item);
    }

Detail_menu.xml

 <item android:id="@+id/text_option"
        android:orderInCategory="100"
        android:showAsAction="ifRoom"
        android:title="Text Option"
         />

CustomSetting.java

public class CustomSetting extends AppCompatActivity {

    DetailActivity detailActivity;
    ImageButton plus,minus,close;
    int txtSize = 14;
    TextView detail=detailActivity.detailtext;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.custom_setting);
        plus= (ImageButton) findViewById(R.id.plus);
        minus= (ImageButton) findViewById(R.id.minus);
        close= (ImageButton) findViewById(R.id.close);

plus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (detail.getTextSize() == 14 ||detail.getTextSize() == 15 || detail.getTextSize() == 16 || detail.getTextSize() == 17){
                    txtSize++;
                    detail.setTextSize(txtSize);
                } else if (detail.getTextSize() == 18) {
                    txtSize+= 0;
                    detail.setTextSize(txtSize);
                } else{
                    txtSize+= 0;
                    detail.setTextSize(txtSize);
                }

            }
        });
        minus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (detail.getTextSize() == 15||detail.getTextSize() ==16||detail.getTextSize() ==17|detail.getTextSize() ==18){
                    txtSize--;
                    detail.setTextSize(txtSize);
                } else {
                    txtSize += 0;
                    detail.setTextSize(txtSize);
                }

            }
        });
        close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent= new Intent(CustomSetting.this,DetailActivity.class);
                startActivity(intent);
            }
        });

    }

custom_setting.xml

<ImageButton
    android:layout_width="50dp"
    android:layout_height="40dp"
    android:background="@drawable/close"
    android:layout_above="@+id/textView"
    android:layout_toRightOf="@+id/minus"
    android:layout_toEndOf="@+id/minus"
    android:id="@+id/close"
    />
    <ImageButton
        android:layout_width="50dp"
        android:layout_height="40dp"
        android:background="@drawable/plusign"
        android:layout_marginTop="110dp"
        android:id="@+id/plus"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/textView"
        android:layout_alignStart="@+id/textView" />
    <ImageButton
        android:layout_width="50dp"
        android:layout_height="40dp"
        android:background="@drawable/minusign"
        android:id="@+id/minus"
        android:layout_alignTop="@+id/plus"
        android:layout_alignRight="@+id/textView"
        android:layout_alignEnd="@+id/textView" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Change Text Size"
        android:id="@+id/textView"
        android:layout_above="@+id/minus"
        android:layout_centerHorizontal="true"
        android:textColor="#FFFFFF"
        />

Logcat:

   Process: com.example.aa.sidd, PID: 23413
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.aa.sidd/com.example.aa.sidd.CustomSetting}: android.view.InflateException: Binary XML file line #17: Error inflating class <unknown>
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2436)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2498)
            at android.app.ActivityThread.access$900(ActivityThread.java:179)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5641)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1288)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1104)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class <unknown>
            at android.view.LayoutInflater.createView(LayoutInflater.java:626)

解决方案

Display the new layout in the form of a DialogFragment. The idea is to show the increase/Decrease option in the form of a DialogFragment popup. you can increase/decrease size from the popup. Once the popup dismisses the selected size is set to the TextView in your Activity.

MainActivity.java

public class MainActivity extends AppCompatActivity {

public static int updatedSize;
TextView greetingText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    greetingText = (TextView)findViewById(R.id.hello_world_text);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        mycustomLayout();
        return true;
    }

    return super.onOptionsItemSelected(item);
}

public void mycustomLayout(){
    FragmentManager manager = getFragmentManager();
    PopUp popUp = new PopUp(new FragmentDismissHandler());
    popUp.show(manager,"POPUP");

}

public void refreshText(){
    if( updatedSize>0)
    greetingText.setTextSize(updatedSize);
}

private class FragmentDismissHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        refreshText();
    }
}

}

PopUp.java (custom layout as DialogFragment)

public class PopUp extends DialogFragment implements View.OnClickListener{

ImageButton increase,decrease,set;
TextView sizeOfText;
static int size;
Handler handler;


public PopUp(Handler handler) {
    this.handler = handler;
}
public PopUp(){

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    getDialog().setTitle("change text size");
    View view = inflater.inflate(R.layout.my_custom_layout, container, false);

    increase = (ImageButton)view.findViewById(R.id.inc);
    increase.setOnClickListener(this);

    decrease = (ImageButton)view.findViewById(R.id.dec);
    decrease.setOnClickListener(this);

    sizeOfText = (TextView)view.findViewById(R.id.size_text);
    sizeOfText.setText("text");

    set = (ImageButton)view.findViewById(R.id.ok);
    set.setOnClickListener(this);

    size = (int) sizeOfText.getTextSize();

    return view;
}


@Override
public void onClick(View view) {
    int id= view.getId();

    if(id==R.id.inc){
        size = size +1;
        sizeOfText.setText("text");
        sizeOfText.setTextSize(size);
    }
    if(id== R.id.dec){
        size = size - 1;
        sizeOfText.setText("text");
        sizeOfText.setTextSize(size);
    }
    if(id== R.id.ok){
        dismiss();
    }
}

@Override
public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    MainActivity.updatedSize = size;
    handler.sendEmptyMessage(0);
}

}

这篇关于应用程序崩溃当试图通过点击按钮来更改TextView的TEXTSIZE的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆