0

私は問題に直面しています。

カスタムレイアウトを作成しました。

展開可能なレイアウトをクリックすると、これらの子ビューを展開および折りたたむ必要があります。このサンプル アプリのすべての展開可能なビューに対してこれを行うにはどうすればよいですか。

展開可能なビューのみに子を追加したいのですが、ExpandableViewクラスにあるすべてのものを子に設定するアクティビティを使用できません。

// カスタム レイアウトを使用した myactivity レイアウト

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res/com.example.customview"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <com.example.customview.ExpandableView
            android:id="@+id/ex_view1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            custom:buttonTitle="Details"
            custom:title="All staff Details"
            custom:visibility="@integer/visible" 
            android:orientation="vertical">
        </com.example.customview.ExpandableView>

        <com.example.customview.ExpandableView
            android:id="@+id/ex_view2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            custom:title="Next coming"
            custom:visibility="@integer/gone" />

        <com.example.customview.ExpandableView
            android:id="@+id/ex_view3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            custom:title="Previous record"
            custom:visibility="@integer/gone" />

        <com.example.customview.ExpandableView
            android:id="@+id/ex_view4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            custom:buttonTitle="Next"
            custom:title="New News"
            custom:visibility="@integer/visible" />
    </LinearLayout>

</ScrollView>

// メインレイアウト

<LinearLayout 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:orientation="vertical" >

    <LinearLayout
        android:id="@+id/parent_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#AAABAB"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/tv_text"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:paddingBottom="15dp"
            android:paddingTop="15dp"
            android:textSize="18sp"
            android:textStyle="bold" />

        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:background="#B7B7B8"
            android:drawableLeft="@drawable/ic_menu_edit"
            android:paddingRight="5dp" />

    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="5dp" />

</LinearLayout>

//コード

public class ExpandableView extends LinearLayout 
{
    TextView textView;
    Button button;
    LinearLayout parentLinear,childLinear;
    View view,convertView;
    Context context;
    WebView web;
    LayoutInflater inflater ;
    View viewLay ; 

    /**
     * Constructor
     * @param context
     * @param attr
     */
    public ExpandableView(final Context context,AttributeSet attr) 
    {
        super(context,attr);
        this.context = context;
        inflate(context,R.layout.mainlayout, this);
        textView =(TextView)findViewById(R.id.tv_text);
        button = (Button)findViewById(R.id.btn);
        parentLinear =(LinearLayout)findViewById(R.id.parent_id);
        getAttributes(attr);
        //setChildView();

}

    public void setChildView()
    {
        web = (WebView)findViewById(R.id.webview);
        web.loadUrl("file:///android_asset/info.html");
    }

    /**
     * function to get attributes from attrs.xml
     * @param attr
     */
    public void getAttributes(AttributeSet attr)
    {
        TypedArray attributes = context.obtainStyledAttributes(attr,R.styleable.MyCustomWidget);

        String textTitle = attributes.getString(R.styleable.MyCustomWidget_title);
        textView.setText(textTitle);

        String textButtonTitle = attributes.getString(R.styleable.MyCustomWidget_buttonTitle);
        button.setText(textButtonTitle);

        int visibility = attributes.getInteger(R.styleable.MyCustomWidget_visibility, 0);
        button.setVisibility(visibility);

        attributes.recycle();
    }

}

今、私は内部にWebビューを追加する必要があるcustom layoutので、私はこのようにやっています

 <com.example.customview.ExpandableView
            android:id="@+id/ex_view1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            custom:buttonTitle="Details"
            custom:title="All staff Details"
            custom:visibility="@integer/visible" 
            android:orientation="vertical">

         <WebView
                android:id="@+id/webview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </com.example.customview.ExpandableView>

問題のケース 1:-

この子のWebビューをアクティビティに設定している場合、正常に動作します.ie

//アクティビティ クラス

expandableOne = (ExpandableView)findViewById(R.id.ex_view1);

        expandableOne.setChildView();

しかし、私はこの子を活動に設定したくありません。

ケース 2:-ExpandableViewクラス でこれを設定したい

だから私はコンストラクターでこのメソッドを呼び出しています。

setChildview();//これはコンストラクターにあります

expandableOne.setChildView();これをクラスから削除しactivityます....今、クラッシュしています

私のログキャット

05-03 11:07:29.364: E/AndroidRuntime(1336): FATAL EXCEPTION: main
05-03 11:07:29.364: E/AndroidRuntime(1336): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.customview/com.example.customview.ExpandableActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.customview.ExpandableView
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.os.Looper.loop(Looper.java:137)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.app.ActivityThread.main(ActivityThread.java:4424)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at java.lang.reflect.Method.invokeNative(Native Method)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at java.lang.reflect.Method.invoke(Method.java:511)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at dalvik.system.NativeStart.main(Native Method)
05-03 11:07:29.364: E/AndroidRuntime(1336): Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.customview.ExpandableView
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.view.LayoutInflater.createView(LayoutInflater.java:606)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.app.Activity.setContentView(Activity.java:1835)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at com.example.customview.ExpandableActivity.onCreate(ExpandableActivity.java:23)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.app.Activity.performCreate(Activity.java:4465)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-03 11:07:29.364: E/AndroidRuntime(1336):     ... 11 more
05-03 11:07:29.364: E/AndroidRuntime(1336): Caused by: java.lang.reflect.InvocationTargetException
05-03 11:07:29.364: E/AndroidRuntime(1336):     at java.lang.reflect.Constructor.constructNative(Native Method)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at android.view.LayoutInflater.createView(LayoutInflater.java:586)
05-03 11:07:29.364: E/AndroidRuntime(1336):     ... 23 more
05-03 11:07:29.364: E/AndroidRuntime(1336): Caused by: java.lang.NullPointerException
05-03 11:07:29.364: E/AndroidRuntime(1336):     at com.example.customview.ExpandableView.setChildView(ExpandableView.java:48)
05-03 11:07:29.364: E/AndroidRuntime(1336):     at com.example.customview.ExpandableView.<init>(ExpandableView.java:41)
05-03 11:07:29.364: E/AndroidRuntime(1336):     ... 26 more

/////

ケース 3:-

4

0 に答える 0