为什么setOnItemClickListener中存在错误

时间:2017-11-15 09:21:53

标签: java android listview

我使用片段,我想在m片段中设置listview。我在这个字段中有错误。 我想使用Foldingcell的ListView,但我认为我的适配器有错误。 我找不到错误。 任何身体都帮不了我? 我该怎么办?

这是我的错误: 引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.widget.ListView.setAdapter(android.widget.ListAdapter)'                                                                            在com.a700daneh.a700daneh.loanFragment.onCreateView(loanFragment.java:49)

  

这是我在listView中使用的元素

public class Item {


String family1;
String cost1;
String family2;
String cost2;
String explain;
String code;
int Icon;


private View.OnClickListener requestBtnClickListener;

public Item() {
}

public Item(String family1, String cost1, String family2, String cost2, String explain, String code, int Icon) {
    this.family1 = family1;
    this.cost1 = cost1;
    this.family2 = family2;
    this.cost2 = cost2;
    this.explain = explain;
    this.code = code;
    this.Icon = Icon;
    //this.time = time;
}

public String getFamily1() {
    return family1;
}

public void setFamily1(String family1) {
    this.family1 = family1;
}

public String getCost1() {
    return cost2;
}

public void setCost1(String cost2) {
    this.cost2 = cost2;
}

public String getFamily2() {
    return family2;
}

public void setFamily2() {
    this.family2 = family2;
}

public String getCost2() {
    return cost2;
}

public void setCost2() {
    this.cost2 = cost2;
}

public String getExplain() {
    return explain;
}

public void setExplain() {
    this.explain = explain;
}

public String getCode() {
    return code;
}

public void setCode() {
    this.code = code;
}

public int getIcon() {
    return Icon;
}




/**
 * @return List of elements prepared for tests
 */
public static ArrayList<Item> getTestingList() {
    ArrayList<Item> items = new ArrayList<>();
    items.add(new Item("خانواده x:", "500,000 تومان", "خانواده x:", "500,000 تومان", "توضیحات:", "کد: 12345678", R.drawable.family));
    items.add(new Item("خانواده x:", "500,000 تومان", "خانواده x:", "500,000 تومان", "توضیحات:", "کد: 12345678", R.drawable.family));
    items.add(new Item("خانواده x:", "500,000 تومان", "خانواده x:", "500,000 تومان", "توضیحات:", "کد: 12345678", R.drawable.family));
    items.add(new Item("خانواده x:", "500,000 تومان", "خانواده x:", "500,000 تومان", "توضیحات:", "کد: 12345678", R.drawable.family));
    items.add(new Item("خانواده x:", "500,000 تومان", "خانواده x:", "500,000 تومان", "توضیحات:", "کد: 12345678", R.drawable.family));
    return items;

}

}

  

这是我的适配器,名为FoldingCellListAdapter

public class FoldingCellListAdapter extends ArrayAdapter<Item> {




private HashSet<Integer> unfoldedIndexes = new HashSet<>();
private View.OnClickListener defaultRequestBtnClickListener;


public FoldingCellListAdapter(Context context, List<Item> objects) {
    super(context, 0, objects);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // get item for selected view
    Item item = getItem(position);
    // if cell is exists - reuse it, if not - create the new one from resource
    FoldingCell cell = (FoldingCell) convertView;
    ViewHolder viewHolder;
    if (cell == null) {
        viewHolder = new ViewHolder();
        LayoutInflater vi = LayoutInflater.from(getContext());
        cell = (FoldingCell) vi.inflate(R.layout.cell, parent, false);
        // binding view parts to view holder
        viewHolder.family1 = (TextView) cell.findViewById(R.id.family1);
        viewHolder.code = (TextView) cell.findViewById(R.id.code);
        viewHolder.family2 = (TextView) cell.findViewById(R.id.family2);
        viewHolder.cost2 = (TextView) cell.findViewById(R.id.cost2);
        viewHolder.explain = (TextView) cell.findViewById(R.id.explain);
        viewHolder.cost1 = (TextView) cell.findViewById(R.id.cost1);
        viewHolder.payment = (TextView) cell.findViewById(R.id.pay);
        viewHolder.familyImage1 = (ImageView) cell.findViewById(R.id.familyImage1);
        viewHolder.pinkback = (ImageView) cell.findViewById(R.id.pinkback);
        viewHolder.familyImage2 = (ImageView) cell.findViewById(R.id.familyImage2);

        cell.setTag(viewHolder);
    } else {
        // for existing cell set valid valid state(without animation)
        if (unfoldedIndexes.contains(position)) {
            cell.unfold(true);
        } else {
            cell.fold(true);
        }
        viewHolder = (ViewHolder) cell.getTag();
    }

    // bind data from selected element to view through view holder
    viewHolder.family1.setText(item.getFamily1());
    //viewHolder.time.setText(item.getTime());
    viewHolder.code.setText(item.getCode());
    viewHolder.family2.setText(item.getFamily2());
    viewHolder.cost2.setText(item.getCost2());
    viewHolder.explain.setText(String.valueOf(item.getExplain()));
    viewHolder.cost1.setText(item.getCost1());
    viewHolder.familyImage1.setImageResource(item.getIcon());
    viewHolder.familyImage2.setImageResource(item.getIcon());
    viewHolder.pinkback.setImageResource(item.getIcon());





    return cell;
}

// simple methods for register cell state changes
public void registerToggle(int position) {
    if (unfoldedIndexes.contains(position))
        registerFold(position);
    else
        registerUnfold(position);
}

public void registerFold(int position) {
    unfoldedIndexes.remove(position);
}

public void registerUnfold(int position) {
    unfoldedIndexes.add(position);
}



// View lookup cache
private static class ViewHolder {
    TextView family1;
    TextView payment;
    TextView cost1;
    TextView family2;
    TextView cost2;
    TextView explain;
    TextView code;
    ImageView familyImage1;
    ImageView pinkback;
    ImageView familyImage2;
}

}

  

这是我在loanFragment中的代码

public class loanFragment extends Fragment {


public loanFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.cell, container, false);

    ListView lvlist = (ListView) view.findViewById(R.id.lvlist);

    final ArrayList<Item> items = Item.getTestingList();


    // create custom adapter that holds elements and their state (we need hold a id's of unfolded elements for reusable elements)
    final FoldingCellListAdapter adapter = new FoldingCellListAdapter(getContext(), items);


    // set elements to adapter
    lvlist.setAdapter(adapter);

    // set on click event listener to list view
    lvlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
            // toggle clicked cell state
            ((FoldingCell) view).toggle(false);
            // register in adapter that state for selected cell is toggled
            adapter.registerToggle(pos);
        }
    });




    return view;

}

}

我有一个名为cell_content_layout的布局,用于折叠单元,另一个布局称为cell_title_layout,并将这些布局包含在一个称为单元格的布局中。

  

cell_title_content

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:baselineAligned="false"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <LinearLayout
        android:id="@+id/cell_title_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/cell_content_view"
        android:layout_toRightOf="@+id/cell_content_view">

        <FrameLayout
            android:id="@+id/familyFrame"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="#dd0f70">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="100dp" />

            <ImageView
                android:id="@+id/familyImage1"
                app:srcCompat="@drawable/family"
                android:layout_width="100dp"
                android:layout_height="109dp"
                android:layout_alignParentBottom="true"
                android:layout_gravity="center_horizontal"
                android:layout_weight="1"
                android:visibility="visible" />

        </FrameLayout>

        <FrameLayout
            android:id="@+id/textFrame1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#d3d8dd">

            <LinearLayout
                android:id="@+id/textLinear1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

                <TextView
                android:id="@+id/family1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginRight="18dp"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:text="۱. خانواده x"
                android:textSize="18dp" />

                <TextView
                android:id="@+id/cost1"
                android:layout_width="match_parent"
                android:layout_height="51dp"
                android:layout_marginRight="18dp"
                android:gravity="center_vertical"
                android:text="۵۰۰,۰۰۰  تومان"
                android:textSize="18dp" />
            </LinearLayout>

            <TextView
            android:layout_width="match_parent"
            android:layout_height="100dp" />

        </FrameLayout>

    </LinearLayout>
</LinearLayout>
  

cell_content_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:visibility="gone"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <LinearLayout
        android:id="@+id/cell_content_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:background="#ffffff"
        android:orientation="vertical"
        >

        <FrameLayout
            android:id="@+id/textFrame2"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:background="#d3d8dd">

            <ImageView
                android:id="@+id/pinkback"
                android:layout_width="100dp"
                android:layout_height="109dp"
                android:layout_alignParentBottom="true"
                android:layout_gravity="left"
                android:layout_weight="1"
                android:background="#dd0f70"
                android:visibility="visible" />

            <ImageView
                android:id="@+id/familyImage2"
                android:layout_width="100dp"
                android:layout_height="109dp"
                android:layout_alignParentBottom="true"
                android:layout_gravity="left"
                android:layout_weight="1"
                android:visibility="visible"
                app:srcCompat="@drawable/family" />

            <LinearLayout
                android:id="@+id/textLinear2"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/family2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginRight="18dp"
                    android:layout_weight="1"
                    android:gravity="center_vertical"
                    android:text="۱. خانواده x"
                    android:textSize="18dp" />

                <TextView
                    android:id="@+id/cost2"
                    android:layout_width="match_parent"
                    android:layout_height="51dp"
                    android:layout_marginRight="18dp"
                    android:gravity="center_vertical"
                    android:text="۵۰۰,۰۰۰  تومان"
                    android:textSize="18dp" />
            </LinearLayout>

        </FrameLayout>

        <FrameLayout
            android:id="@+id/containFrame"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

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

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

            </FrameLayout>

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

            </FrameLayout>

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

            </FrameLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal">

            </LinearLayout>
        </FrameLayout>

        <FrameLayout
        android:id="@+id/frameContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

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

            <TextView
                android:id="@+id/explain"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginRight="18dp"
                android:layout_marginTop="15dp"
                android:layout_weight="1.00"
                android:gravity="right"
                android:text="توضیحات:" />

            <TextView
                android:id="@+id/code"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginRight="18dp"
                android:layout_weight="0.99"
                android:gravity="right"
                android:text="کد: ۱۲۳۴۵۶۷۸۹" />

            <Button
                android:id="@+id/pay"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:layout_marginBottom="5dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="5dp"
                android:background="@drawable/button_style2"
                android:text="پرداخت"
                android:textColor="@color/white"
                android:textSize="16dp" />

        </LinearLayout>
    </FrameLayout>

    <TextView
        android:id="@+id/textView6"
        android:layout_width="match_parent"
        android:layout_height="0dp" />

</LinearLayout>

细胞

<?xml version="1.0" encoding="utf-8"?>

<com.ramotion.foldingcell.FoldingCell

    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/folding_cell_main"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="10dp"
    android:clipChildren="false"
    android:clipToPadding="false">

    <include
        android:id="@+id/include"
        layout="@layout/cell_content_layout"
        android:visibility="gone" />

    <include
        layout="@layout/cell_title_layout"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/include" />

</com.ramotion.foldingcell.FoldingCell>

1 个答案:

答案 0 :(得分:0)

您的错误似乎在setAdapter而非onItemClickListener。 我的猜测是ListView lvlist = (ListView) view.findViewById(R.id.lvlist);返回null; 检查&#34; R.id.lvlist&#34;确实是xml文件中listView的id。

另外,检查是否&#34; lvlist&#34;在findViewById代码行

之后为null