私は問題に直面しています。
カスタムレイアウトを作成しました。
展開可能なレイアウトをクリックすると、これらの子ビューを展開および折りたたむ必要があります。このサンプル アプリのすべての展開可能なビューに対してこれを行うにはどうすればよいですか。
展開可能なビューのみに子を追加したいのですが、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:-