0

Я пытаюсь добавить элемент Listen List List внутри фрагмента, но получаю ошибки, я использую идею intellij.Ошибка ListView OnItemClickListener в фрагменте

Вот мой исходный код:

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; 
} 

} 
+0

Можете ли вы разместить класс адаптера? –

+0

Я добавил класс адаптера. –

+0

Вы можете попробовать 'getActivity()' вместо 'getApplicationContext()'. –

ответ

0

Android (к сожалению) не поддерживает лямбда-выражения. Вы можете использовать анонимный внутренний класс, как показано ниже, или посмотреть на использование сторонней библиотеки, такой как RetroLambda, которая предоставляет обратный путь.

listView.setOnItemClickListener(
new OnItemClickListener(adapterView, view1, position, id) { 
       Toast.makeText(getActivity().getApplicationContext(), "ListView Clicked", Toast.LENGTH_LONG).show(); 
      }); 
+0

Спасибо. Я заменил лямбда анонимным внутренним классом, и я потерял все ошибки, но я не могу получить тост. –

+0

попробуйте удалить getApplicationContext() – Tauqir

+0

Я удалил его, но все еще имею ту же проблему. –

0

Попробуйте это.

listView.setOnItemClickListener((adapterView, view1, position, id) -> { 
Toast.makeText(getActivity(), "ListView Clicked", Toast.LENGTH_LONG).show(); 
}); 
0

Наконец-то я получил ответ после некоторого исследования. Первая ошибка была, конечно, из-за использования выражения lambda, которое я заменил на анонимный внутренний класс.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       Toast.makeText(getActivity(), "ListView Clicked", Toast.LENGTH_LONG).show(); 
      } 
     }); 

И отсутствие ответа от элементов списка была решена путем добавления этой строки кода пользовательского вида элемента списка (в моем случае это макет/cinema_list_item.xml)

android:descendantFocusability="blocksDescendants" 

, который добавлен к родительскому макету

Смежные вопросы