片段上的自定义列表视图 - 无法使用getActivity()

时间:2017-06-13 20:35:13

标签: java android xml listview android-fragments

我正在尝试根据this answer在项目详细信息旁边添加删除按钮。 我在一个新项目上尝试过,它的工作非常好:

enter image description here

当我点击删除时,我删除了该项目。

遗憾的是,当我的listView在calendar_tab.xml中时,我试图在我自己的项目中使用它。 calendar_tab使用CompactCalendarTab.java - fragment类。 所以Android Studio出错:  的 E:\下载\ MyCustomAdapter.java

错误:(49,63)错误:找不到符号方法getSystemService(String)

我试图改变

LayoutInflater inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

LayoutInflater inflater =(LayoutInflater)getActivity()。getSystemService(Context.LAYOUT_INFLATER_SERVICE);

但没有运气。

enter image description here

custom_listview.xml:

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

<TextView
    android:id="@+id/list_item_string"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:paddingLeft="8dp"
    android:textSize="18sp"
    android:textStyle="bold" />

<Button
    android:id="@+id/delete_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:layout_marginRight="5dp"
    android:text="Delete" />

calendar_tab.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:id="@+id/calendar_tab"
android:layout_height="match_parent"
>

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/toolbar_calendar"
    android:background="@color/teal_300"
    android:layout_alignParentTop="true"
    android:padding="10sp"
    android:layout_alignParentStart="true">

    <ImageButton
        android:id="@+id/back_button"
        android:src="@mipmap/ic_arrow_back_black_24dp"
        android:background="@null"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:onClick="goBackmain"
         />

<ImageButton
    android:id="@+id/next_button"
    android:src="@mipmap/ic_keyboard_arrow_left_black_24dp"
    android:background="@null"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@+id/showdate"
    android:layout_toStartOf="@+id/showdate" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""
    android:textSize="25sp"
    android:textStyle="bold"
    android:textColor="@color/black"
    android:id="@+id/showdate"
    android:layout_alignBaseline="@+id/prev_button"
    android:layout_alignBottom="@+id/prev_button"
    android:layout_centerHorizontal="true" />

<ImageButton
    android:id="@+id/prev_button"
    android:src="@mipmap/ic_keyboard_arrow_right_black_24dp"
    android:background="@null"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/showdate"
    android:layout_toEndOf="@+id/showdate" />

    </RelativeLayout>

<com.github.sundeepk.compactcalendarview.CompactCalendarView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/compactcalendar_view"
    android:layout_width="fill_parent"
    android:layout_height="250dp"
    app:compactCalendarTargetHeight="250dp"
    app:compactCalendarTextSize="12sp"
    app:compactCalendarBackgroundColor="@null"
    app:compactCalendarTextColor="@color/blue_grey_700"
    app:compactCalendarCurrentSelectedDayBackgroundColor="@color/teal_300"
    app:compactCalendarCurrentDayBackgroundColor="@color/teal_600"
    app:compactCalendarCurrentDayIndicatorStyle="fill_large_indicator"
    app:compactCalendarEventIndicatorStyle="small_indicator"
    app:compactCalendarOtherMonthDaysTextColor="#534c4c"
    app:compactCalendarShouldSelectFirstDayOfMonthOnScroll="true"
    android:layout_below="@+id/toolbar_calendar"
    />


<ListView
    android:id="@+id/bookings_listview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/compactcalendar_view"
    >
</ListView>

我的片段:

  public class CompactCalendarTab extends Fragment {
 final ListView bookingsListView = (ListView) v.findViewById(R.id.bookings_listview);
    adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, mutableBookings);
    final ArrayList<String> list = new ArrayList<>();
    final MyCustomAdapter adapter = new MyCustomAdapter(list, this);
    bookingsListView.setAdapter(adapter);
    compactCalendarView = (CompactCalendarView) 
    v.findViewById(R.id.compactcalendar_view);
    }

我的自定义适配器:

public class MyCustomAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<String>();
private CompactCalendarTab context;



public MyCustomAdapter(ArrayList<String> list, CompactCalendarTab context) {
    this.list = list;
    this.context = context;
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int pos) {
    return list.get(pos);
}

@Override
public long getItemId(int pos) {
    return 0;
    //just return 0 if your list items do not have an Id variable.
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View view = convertView;
    if (view == null) {
        LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.custom_listview, null);
    }

    //Handle TextView and display string from your list
    TextView listItemText = (TextView)view.findViewById(R.id.list_item_string);
    listItemText.setText(list.get(position));

    //Handle buttons and add onClickListeners
    Button deleteBtn = (Button)view.findViewById(R.id.delete_btn);

    deleteBtn.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            //do something
            list.remove(position); //or some other task
            notifyDataSetChanged();
        }
    });

    return view;
}

}

1 个答案:

答案 0 :(得分:1)

更改此行

LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

到此

LayoutInflater inflater = LayoutInflater.from(parent.getContext());