Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android方向改变崩溃_Java_Android_Xml_Android Layout_Android Custom View - Fatal编程技术网

Java Android方向改变崩溃

Java Android方向改变崩溃,java,android,xml,android-layout,android-custom-view,Java,Android,Xml,Android Layout,Android Custom View,我在LinearLayout中编写了由TextView和EditText组成的自定义视图 但是在方向改变时我得到了这个错误: java.lang.RuntimeException: Unable to start activity ComponentInfo{ge.altasoft.datacollector/ge.altasoft.datacollector.ViewPagerActivity}: java.lang.ClassCastException: android.widget.Tex

我在
LinearLayout
中编写了由
TextView
EditText
组成的自定义视图

但是在
方向改变时
我得到了这个错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{ge.altasoft.datacollector/ge.altasoft.datacollector.ViewPagerActivity}: java.lang.ClassCastException: android.widget.TextView$SavedState cannot be cast to android.widget.AbsSpinner$SavedState
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122)
    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3550)
    at android.app.ActivityThread.access$700(ActivityThread.java:140)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4895)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.ClassCastException: android.widget.TextView$SavedState cannot be cast to android.widget.AbsSpinner$SavedState
    at android.widget.AbsSpinner.onRestoreInstanceState(AbsSpinner.java:426)
    at android.view.View.dispatchRestoreInstanceState(View.java:12217)
    at android.view.ViewGroup.dispatchThawSelfOnly(ViewGroup.java:2613)
    at android.widget.AdapterView.dispatchRestoreInstanceState(AdapterView.java:790)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2599)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2599)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2599)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2599)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2599)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2599)
    at android.view.View.restoreHierarchyState(View.java:12195)
    at android.support.v4.app.Fragment.restoreViewState(Fragment.java:417)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:933)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
    at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1861)
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1178)
    at android.app.Activity.performStart(Activity.java:5173)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2070)
    ... 12 more
这是我的密码:

XEditText类:

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.os.Parcelable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.StringTokenizer;
import ge.altasoft.datacollector.R;

/**
 * .
 */

public class XEditText extends LinearLayout {
    private LayoutInflater inflater;
    private View view;
    private TextView label;
    private EditText edit;
    private String viewParameter, textLabel;
    private int dafarvisTarigiId = -1, gacemisTarigiId = -1;
    private boolean xTextChanged = true;

public XEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    initViews();
    getViewAttributes(context, attrs);
    addListeners();
}

public String getXViewParameter(){
    return String.valueOf(this.viewParameter);
}

public String getXValue(){
    return String.valueOf(this.edit.getText());
}

public void setXValue(String xValue) {
    this.edit.setText(String.valueOf(xValue));
}

public void setXTextChanged (boolean ch) {
    this.xTextChanged = ch;
}

private void initViews(){
    inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.x_edittext_view, this, true);
    label = (TextView) findViewById(R.id.label);
    edit = (EditText) findViewById(R.id.input);
}

/**
 * Getting all attributes of view Id-s.
 *
 * @param context
 * @param attrs
 */
private void getViewAttributes(Context context, AttributeSet attrs) {
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.XEditText);
    final int N = a.getIndexCount();
    for(int i = 0; i < N; i++){
        int attr = a.getIndex(i);
        switch(attr){
            case R.styleable.XEditText_textLabel:
                textLabel = a.getString(attr);
                label.setText(String.valueOf(textLabel));
                break;
            case R.styleable.XEditText_viewParameter:
                viewParameter = a.getString(attr);
                break;
            case R.styleable.XEditText_dafarvisTarigi:
                dafarvisTarigiId = a.getResourceId(attr, -1);
                break;
            case R.styleable.XEditText_gacemisTarigi:
                gacemisTarigiId = a.getResourceId(attr, -1);
                break;
            case R.styleable.XEditText_android_inputType:
                int inputType = a.getInt(attr, EditorInfo.TYPE_TEXT_VARIATION_NORMAL);
                edit.setInputType(inputType);
                break;
        }
    }
    a.recycle();
}

private void addListeners() {
    this.edit.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                ((LinearLayout) v.getParent()).setBackgroundColor(Color.LTGRAY);
            } else {
                ((LinearLayout) v.getParent()).setBackgroundColor(Color.TRANSPARENT);
            }
        }
    });
    if(gacemisTarigiId != -1 && dafarvisTarigiId != -1){
        Watcher watch = new Watcher(this);
        this.edit.addTextChangedListener(watch);
    }else
        return;
}

private class Watcher implements TextWatcher{
    private XEditText edit;

    public Watcher(XEditText xEditText) {
        this.edit = xEditText;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }

    @Override
    public void afterTextChanged(Editable s) {
        if(!edit.xTextChanged){
            edit.setXTextChanged(true);
            return;
        }
        XDatePickerView dafarvisTarigi = (XDatePickerView) edit.getRootView().findViewById(dafarvisTarigiId);
        XDatePickerView gacemisTarigi = (XDatePickerView) edit.getRootView().findViewById(gacemisTarigiId);
        String gacTar = gacemisTarigi.getXValue();
        if(gacTar.equals(""))
            return;
        StringTokenizer tk = new StringTokenizer(gacTar, "- ");
        int gacMonth = Integer.parseInt(tk.nextToken());
        int gacDay = Integer.parseInt(tk.nextToken());
        int gacYear = Integer.parseInt(tk.nextToken());
        if(s.toString().equals("")){
            dafarvisTarigi.setXTextChanged(false);
            dafarvisTarigi.setXValue(getResources().getString(R.string.x_dat_view_txt));
        } else {
            int months = Integer.parseInt(String.valueOf(s.toString()));
            int addYear = (months + gacMonth) / 12;
            int addMonth = months - addYear * 12;
            dafarvisTarigi.setXTextChanged(false);
            dafarvisTarigi.setXValue(new StringBuilder().append(gacMonth + addMonth)
                    .append("-").append(gacDay).append("-").append(gacYear + addYear).append(" ").toString());
        }
    }
}
}


感谢您的建议。

我找到了问题的
解决方案

正如
错误告诉我的那样,问题出在
糟糕的演员阵容中

正如我所说,我有许多
自定义视图
,它们都由两个组件组成:
TextView
和一些
输入类型视图
。所有
文本视图
和所有
输入类型视图
具有相同的
Id
-s,尽管其类型不同

例如,如果我有两个
自定义视图
编辑文本类型
微调器类型
,在方向更改时,android试图
编辑文本
保存状态
转换为
微调器
保存状态
,应用程序崩溃

所以我只是更改了
Id
-s,一切都很顺利


感谢大家的帮助。

使用onSavedInstanceState恢复方向更改时的活动是否将布局显示为微调器中的一项?活动代码缺失,从堆栈跟踪中我看到您试图执行错误操作cast@SherifelKhatib不,我只是在主布局中使用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
    android:id="@+id/label"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:layout_weight="@dimen/textLabel_weight" />

<EditText
    android:id="@+id/input"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="@dimen/inputView_weight" />

</LinearLayout>
<LinearLayout
        android:id="@+id/linear"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ge.altasoft.custom_views.XEditText
            android:id="@+id/first_name"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:inputType="phone"
            custom:textLabel="სახელი"
            custom:viewParameter="opaaa"/>
</LinearLayout>
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.io.Serializable;
import java.util.ArrayList;
import ge.altasoft.Item.DetailsItemI;
import ge.altasoft.controllers.ViewFillerController;

public class OrdinaryFragment extends Fragment implements Serializable{
    private static final String LAYOUT_ID = "LayoutId";
    private int layoutId;

    public static final String ARG_SECTION_NUMBER = "section_number";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    this.setRetainInstance(true);
    layoutId = getArguments().getInt(LAYOUT_ID);

    View rootView = inflater.inflate(layoutId, container, false);

    ArrayList<DetailsItemI> list = (ArrayList<DetailsItemI>)getArguments().getSerializable("ViewData");
    ViewFillerController viewFiller = new ViewFillerController();
    viewFiller.fillTheView(rootView, list);

    return rootView;
}