2017-11-09 2 views
0

私はこのエラーを検索しましたが、何も助けになりませんでした。 アダプタでitemCountを設定するだけでリストビューの項目を作成できますが、このエラーはアダプタでレイアウトを拡張しているときに表示されます。InvocationTargetExceptionリストビューアダプターで膨らませようとしています。android

E/AndroidRuntime: FATAL EXCEPTION: main 
               Process: com.digitronic.SmsController, PID: 25805 
               android.view.InflateException: Binary XML file line #37: Binary XML file line #37: Error inflating class <unknown> 
               Caused by: android.view.InflateException: Binary XML file line #37: Error inflating class <unknown> 
               Caused by: java.lang.reflect.InvocationTargetException 
                at java.lang.reflect.Constructor.newInstance0(Native Method) 
                at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 
                at android.view.LayoutInflater.createView(LayoutInflater.java:652) 
                at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58) 
                at android.view.LayoutInflater.onCreateView(LayoutInflater.java:724) 
                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:792) 
                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734) 
                at android.view.LayoutInflater.rInflate(LayoutInflater.java:865) 
                at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:525) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:427) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:378) 
                at com.digitronic.smscontroller.View.RelaysListAdapter.getView(RelaysListAdapter.java:90) 
                at android.widget.AbsListView.obtainView(AbsListView.java:3229) 
                at android.widget.ListView.makeAndAddView(ListView.java:2147) 
                at android.widget.ListView.fillDown(ListView.java:767) 
                at android.widget.ListView.fillFromTop(ListView.java:833) 
                at android.widget.ListView.layoutChildren(ListView.java:1900) 
                at android.widget.AbsListView.onLayout(AbsListView.java:2999) 
                at android.view.View.layout(View.java:18799) 
                at android.view.ViewGroup.layout(ViewGroup.java:5952) 
                at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) 
                at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) 
                at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 
                at android.view.View.layout(View.java:18799) 
                at android.view.ViewGroup.layout(ViewGroup.java:5952) 
                at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1626) 
                at android.view.View.layout(View.java:18799) 
                at android.view.ViewGroup.layout(ViewGroup.java:5952) 
                at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) 
                at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) 
                at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 
                at android.view.View.layout(View.java:18799) 
                at android.view.ViewGroup.layout(ViewGroup.java:5952) 
                at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
                at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                at android.view.View.layout(View.java:18799) 
                at android.view.ViewGroup.layout(ViewGroup.java:5952) 
                at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) 
                at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) 
                at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 
                at android.view.View.layout(View.java:18799) 
                at android.view.ViewGroup.layout(ViewGroup.java:5952) 
                at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
                at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                at android.view.View.layout(View.java:18799) 
                at android.view.ViewGroup.layout(ViewGroup.java:5952) 
                at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) 
                at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) 
                at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 
                at android.view.View.layout(View.java:18799) 
                at android.view.ViewGroup.layout(ViewGroup.java:5952) 
                at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
                at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                at com.android.internal.policy.DecorView.onLayout(DecorView.java:822) 
                at android.view.View.layout(View.java:18799) 
                at android.view.ViewGroup.layout(ViewGroup.java:5952) 
                at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2634) 

これは私がリストビューを入れている断片である:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/third_gray"> 
<ListView 
    android:id="@+id/inputs_lv" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="@null" /></LinearLayout> 

私のリストビューアダプタ:

package com.digitronic.smscontroller.View; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.FrameLayout; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.digitronic.smscontroller.R; 

import java.util.ArrayList; 

/** 
* Created by Ali Gadimi on 11/7/2017. 
*/ 

public class RelaysListAdapter extends BaseAdapter { 
private int itemCount = 0; 


private Context context; 
private ArrayList<RelaysItem> items; 
private LayoutInflater inflater; 

public RelaysListAdapter(Context c) 
{ 
    this.context = c; 
    inflater = LayoutInflater.from(c); 
} 
public void setItems() 
{ 

} 
public void setItemCount(int count) 
{ 
    this.itemCount = count; 
} 

public void updateViewIcon(int position, int iconResource) 
{ 
    items.get(position).icon = iconResource; 
    notifyDataSetChanged(); 
} 

public void updateViewName(int position, String name) 
{ 
    items.get(position).name = name; 
    notifyDataSetChanged(); 
} 

public void updateViewTimer(int position, int timerValue) 
{ 
    items.get(position).time = timerValue; 
    notifyDataSetChanged(); 
} 

public void updateViewOnOff(int position, int inputState) 
{ 
    items.get(position).inputState = inputState; 
    notifyDataSetChanged(); 
} 

@Override 
public int getCount() { 
    return itemCount; 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) 
    { 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.relay_item, null); 
     holder.iconIv = (ImageView) convertView.findViewById(R.id.icon_iv); 
     holder.nameTv = (TextView) convertView.findViewById(R.id.name_tv); 
     holder.timerIb = (ImageButton) convertView.findViewById(R.id.timer_ib); 
     holder.onBtn = (Button) convertView.findViewById(R.id.on_btn); 
     holder.offBtn = (Button) convertView.findViewById(R.id.off_btn); 

     convertView.setTag(holder); 
    } 
    else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    RelaysItem item; 
    if(items.size() == itemCount) 
     item = items.get(position); 
    else 
     item = new RelaysItem(); 

    holder.iconIv.setImageResource(item.icon); 
    holder.nameTv.setText(item.name.equals("") ? "Relay " + (position+1): item.name); 
    setupTimerIb(holder.timerIb, position, item.time); 
    setupOnOffBtn(holder.onBtn, holder.offBtn, position, item.inputState); 

    return convertView; 
} 

private void setupTimerIb(ImageButton timerIb, int position, int timerValue) 
{ 
    if (timerValue > 0) 
     timerIb.setImageResource(R.drawable.timer_set); 
    else 
     timerIb.setImageResource(R.drawable.timer_unset); 
    timerIb.setOnClickListener(new TimerIbOnClickListener(position)); 
} 

private void setupOnOffBtn(Button onBtn, Button offBtn, int position, int inputState) 
{ 
    if (inputState == 0) 
    { 
     onBtn.setTextColor(context.getResources().getColor(R.color.gray)); 
     ((FrameLayout) onBtn.getParent()).setBackgroundColor(context.getResources().getColor(R.color.third_gray)); 
     offBtn.setTextColor(context.getResources().getColor(R.color.secondary_white)); 
     ((FrameLayout) offBtn.getParent()).setBackgroundColor(context.getResources().getColor(R.color.off_state)); 
    } 
    else if(inputState == 1) 
    { 
      onBtn.setTextColor(context.getResources().getColor(R.color.secondary_white)); 
      ((FrameLayout) onBtn.getParent()).setBackgroundColor(context.getResources().getColor(R.color.on_state)); 
      offBtn.setTextColor(context.getResources().getColor(R.color.gray)); 
      ((FrameLayout) offBtn.getParent()).setBackgroundColor(context.getResources().getColor(R.color.third_gray)); 
    } 
    else if(inputState == -1) 
    { 
     onBtn.setTextColor(context.getResources().getColor(R.color.gray)); 
     ((FrameLayout) onBtn.getParent()).setBackgroundColor(context.getResources().getColor(R.color.third_gray)); 
     offBtn.setTextColor(context.getResources().getColor(R.color.gray)); 
     ((FrameLayout) offBtn.getParent()).setBackgroundColor(context.getResources().getColor(R.color.third_gray)); 
    } 

    onBtn.setOnClickListener(new OnBtnOnClickListener(position)); 
    offBtn.setOnClickListener(new OffBtnOnClickListener(position)); 
} 

private class TimerIbOnClickListener implements View.OnClickListener { 
    private int position; 

    TimerIbOnClickListener(int position){ 
     this.position = position; 
    } 

    @Override 
    public void onClick(View v) { 
     Toast.makeText(context, "Timer button click in position " + position, Toast.LENGTH_SHORT).show(); 
    } 
} 

private class OnBtnOnClickListener implements View.OnClickListener { 
    private int position; 

    OnBtnOnClickListener(int position){ 
     this.position = position; 
    } 

    @Override 
    public void onClick(View v) { 
     Toast.makeText(context, "On button click in position " + position, Toast.LENGTH_SHORT).show(); 
    } 
} 

private class OffBtnOnClickListener implements View.OnClickListener { 
    private int position; 

    OffBtnOnClickListener(int position){ 
     this.position = position; 
    } 

    @Override 
    public void onClick(View v) { 
     Toast.makeText(context, "Off button click in position " + position, Toast.LENGTH_SHORT).show(); 
    } 
} 


private class ViewHolder{ 
    ImageView iconIv; 
    TextView nameTv; 
    ImageButton timerIb; 
    Button onBtn; 
    Button offBtn; 
} 
} 

これはrelays_tab.xmlある

package com.digitronic.smscontroller.View; 

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 

import com.digitronic.smscontroller.R; 
import com.digitronic.smscontroller.View.Interface.IControllerActivity; 

import butterknife.ButterKnife; 
import butterknife.InjectView; 

/** 
* Created by Ali Gadimi on 11/5/2017. 
*/ 

public class RelaysFragment extends Fragment { 

@InjectView(R.id.inputs_lv)ListView inputsLv; 

private View mainView; 
private IControllerActivity activity; 
private RelaysListAdapter listAdapter; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    mainView = inflater.inflate(R.layout.relays_tab, container, false); 
    ButterKnife.inject(this, mainView); 
    return mainView; 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    activity.relaysFragmentLoaded(); 
} 

public void setParent(IControllerActivity activity) 
{ 
    this.activity = activity; 
} 

public void addViews(int viewCount) 
{ 
    listAdapter = new RelaysListAdapter(getActivity().getApplicationContext()); 
    listAdapter.setItemCount(viewCount); 
    inputsLv.setAdapter(listAdapter); 
} 
} 

とリストビューアイテムのレイアウトrelay_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="100dp" 
android:layout_marginTop="3dp" 
android:layout_marginBottom="3dp" 
android:background="@color/white" 
android:elevation="1dp"> 

<ImageView 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    app:layout_constraintTop_toTopOf="parent" 
    android:layout_marginTop="8dp" 
    app:layout_constraintBottom_toBottomOf="parent" 
    android:layout_marginBottom="8dp" 
    android:layout_marginLeft="8dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    android:id="@+id/icon_iv" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="@color/gray" 
    android:textSize="18sp" 
    app:layout_constraintLeft_toRightOf="@+id/icon_iv" 
    android:layout_marginLeft="8dp" 
    app:layout_constraintTop_toTopOf="parent" 
    android:layout_marginTop="8dp" 
    app:layout_constraintBottom_toBottomOf="parent" 
    android:layout_marginBottom="8dp" 
    android:id="@+id/name_tv" /> 

<ImageButton 
    android:id="@+id/timer_ib" 
    android:layout_width="20dp" 
    android:layout_height="20dp" 
    android:scaleType="centerInside" 
    android:src="@drawable/timer_unset" 
    android:background="?attr/selectableItemBackground" 
    app:layout_constraintTop_toTopOf="parent" 
    android:layout_marginTop="8dp" 
    app:layout_constraintBottom_toBottomOf="parent" 
    android:layout_marginBottom="8dp" 
    app:layout_constraintRight_toLeftOf="@+id/linearLayout" 
    android:layout_marginRight="16dp"/> 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="8dp" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    android:layout_marginBottom="8dp" 
    app:layout_constraintTop_toTopOf="parent" 
    android:layout_marginTop="8dp" 
    android:id="@+id/linearLayout"> 

    <FrameLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@color/third_gray"> 
     <Button 
      android:id="@+id/on_btn" 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:text="@string/on" 
      android:textColor="@color/gray" 
      android:textAllCaps="false" 
      android:background="?attr/selectableItemBackground"/> 
    </FrameLayout> 

    <View 
     android:layout_width="2dp" 
     android:layout_height="50dp" 
     android:background="@color/gray"/> 

    <FrameLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@color/third_gray"> 
     <Button 
      android:id="@+id/off_btn" 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:text="@string/off" 
      android:textColor="@color/gray" 
      android:textAllCaps="false" 
      android:background="?attr/selectableItemBackground"/> 
    </FrameLayout> 
</LinearLayout> 

</android.support.constraint.ConstraintLayout> 

私はエラーがここにあります理由だけで、それは主にこの問題で書かれたコードだといくつかの詳細を追加するために私に尋ねたが、私は十分に言ったと思うと言って、これを書いている:D

+0

PLZポストrelay_item.xmlので、我々は、私は、これはあなたの問題を解決することを願っていますそれ – 7heaven

答えて

0

このように、あなたのレイアウトを膨らま:

LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
convertView = inflater.inflate(R.layout.relay_item, parent, false); 
+0

と間違っかを把握することができます。それが答えとしてマークすることを忘れないでください。ハッピーコーディング仲間:) –

+0

ありがとう、それは動作します。問題はLayoutInflatorを取得することでした –

+0

私はそれがあなたを助けてうれしいです:) –

関連する問題