【发布时间】:2015-08-30 15:10:23
【问题描述】:
我正在尝试在片段内的 ListView 上添加一个项目点击侦听器,但出现错误,我正在使用 intellij idea。
这是我的源代码:
public static class FragmentFind extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
List<CinemaListItem> list=new ArrayList<>();
list.add(new CinemaListItem("Name",0,"place",200));
View view=inflater.inflate(R.layout.fragment_find,container,false);
ListView listView=(ListView) view.findViewById(R.id.cinema_list);
listView.setAdapter(new CinemaListAdapter(getActivity(),R.layout.cinema_list_item,list));
listView.setOnItemClickListener((adapterView, view1, position, id) -> {
Toast.makeText(getActivity().getApplicationContext(), "ListView Clicked", Toast.LENGTH_LONG).show();
});
return view;
}
}
这些是我遇到的错误。
Information:Using javac 1.8.0_40 to compile java sources
Information:8/30/2015 6:04 PM - Compilation completed with 30 errors and 0 warnings in 16s 595ms
Error:Android Dex: [App] UNEXPECTED TOP-LEVEL EXCEPTION:
Error:Android Dex: [App] com.android.dx.cf.iface.ParseException:
InvokeDynamic not supported
Error:Android Dex: [App] at com.android.dx.cf.cst.ConstantPoolParser.determineOffsets(ConstantPoolParser.java:226)
Error:Android Dex: [App] at com.android.dx.cf.cst.ConstantPoolParser.parse(ConstantPoolParser.java:132)
Error:Android Dex: [App] at com.android.dx.cf.cst.ConstantPoolParser.parseIfNecessary(ConstantPoolParser.java:124)
Error:Android Dex: [App] at com.android.dx.cf.cst.ConstantPoolParser.getPool(ConstantPoolParser.java:115)
Error:Android Dex: [App] at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:482)
Error:Android Dex: [App] at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
Error:Android Dex: [App] at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
Error:Android Dex: [App] at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
Error:Android Dex: [App] at com.android.dx.command.dexer.Main.processClass(Main.java:704)
Error:Android Dex: [App] at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
Error:Android Dex: [App] at com.android.dx.command.dexer.Main.access$300(Main.java:83)
Error:Android Dex: [App] at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
Error:Android Dex: [App] at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:170)
Error:Android Dex: [App] at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
Error:Android Dex: [App] at com.android.dx.command.dexer.Main.processOne(Main.java:632)
Error:Android Dex: [App] at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
Error:Android Dex: [App] at com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)
Error:Android Dex: [App] at com.android.dx.command.dexer.Main.run(Main.java:246)
Error:Android Dex: [App] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Error:Android Dex: [App] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Error:Android Dex: [App] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Error:Android Dex: [App] at java.lang.reflect.Method.invoke(Method.java:497)
Error:Android Dex: [App] at org.jetbrains.android.compiler.tools.AndroidDxRunner.runDex(AndroidDxRunner.java:161)
Error:Android Dex: [App] at org.jetbrains.android.compiler.tools.AndroidDxRunner.main(AndroidDxRunner.java:294)
Error:Android Dex: [App] at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:130)
Error:Android Dex: [App] ...while preparsing cst 0015 at offset 0000005e
Error:Android Dex: [App] ...while parsing C:/Users/ACER 15/Desktop/Android Projects/CinemaProject/App/out/production/App/com/example/app/FragmentPageAdapter$FragmentFind.class
Error:Android Dex: [App] 1 error; aborting
一开始我实际上没有收到任何错误,但我只有在添加 setOnItemClickLister 时才会收到错误。
谢谢。
已编辑 这是适配器类:
public class CinemaListAdapter extends ArrayAdapter<CinemaListItem>{
private List<CinemaListItem> list;
public CinemaListAdapter(Context context, int resource, List<CinemaListItem> objects) {
super(context, resource, objects);
list=objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view =convertView;
if(view==null){
LayoutInflater inflater=(LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view=inflater.inflate(R.layout.cinema_list_item,parent,false);
}
TextView name=(TextView) view.findViewById(R.id.name);
TextView distance=(TextView) view.findViewById(R.id.distance);
name.setText(list.get(position).getName());
name.setTypeface(MyActivity.dekar);
int dist=list.get(position).getDistance();
distance.setText("" + dist + "m");
return view;
}
}
【问题讨论】:
-
你能发布你的适配器类吗?
-
我已经添加了适配器类。
-
你可以试试
getActivity()而不是getApplicationContext()。
标签: android listview android-fragments android-arrayadapter onitemclicklistener