2017-02-19 5 views
0

Я пытаюсь создать представление списка внутри фрагмента в Android. Я успешно заполнил список с помощью массива клубов, но мой метод OnClick никогда не достигается, когда я нажимаю на свой список. Я надеюсь увидеть тост с номером строки.Почему мой метод onClick не достигается в этом фрагменте

Пожалуйста, смотрите код ниже:

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 

/** 
* club selection java Class 
*/ 



public class ClubsFragment extends Fragment implements View.OnClickListener { 

    String[] mClubArray; 
    ListView MyList; 


    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 


     //returning our layout file 
     //change R.layout.yourlayoutfilename for each of your fragments 

     View view = inflater.inflate(R.layout.fragment_clubs, container, false); 

     mClubArray = getResources().getStringArray(R.array.club_array); 

     ArrayAdapter<String> itemsAdapter = 
       new ArrayAdapter<String>(getContext(), R.layout.list_item_style, mClubArray); 

     MyList = (ListView) view.findViewById(R.id.ClubList); 
     MyList.setAdapter(itemsAdapter); 

     return view; 

    } 


    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     //you can set the title for your toolbar here for different fragments different titles 
     getActivity().setTitle("Clubs"); 

    } 



    @Override 
    public void onClick(View view) { 

     MyList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) 
      { 

       Toast.makeText(getContext(), 
         "Click ListItem Number " + position, Toast.LENGTH_LONG) 
         .show(); 


      } 
     }); 


    } 





} 

ответ

1

в вашем onCreateView():

использование OnItemClickListener

После U установлен адаптер

MyList.setOnItemClickListener(new OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> adapter, View v, int position, 
      long arg3) 
     { 
      String value = (String)adapter.getItemAtPosition(position); 
      Toast.makeText(this,value,Toast.LENGTH_SHORT).show(); 
      list.remove(position); 
      adapter.notifyDataSetChanged(); 
      // do what you intend to do on click of listview row 
     } 
    }); 

удалить пункт:

ArrayList<String> list =new ArrayList<String>(Arrays.asList(mClubArray)); //declare globally so that u can access it 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, list); 

MyList.setAdapter(adapter); 
    MyList.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Toast.makeText(getActivity(), "You selected : " + item, Toast.LENGTH_SHORT).show(); 
      String item = list.get(position); 
      list.remove(position); 
      adapter.notifyDataSetChanged(); 

     } 
    }); 
+0

Спасибо, Это нормально, чтобы иметь это в моем onVie wCreated() вместо этого? – Malorrr

+0

yes u может вызывать прослушиватель кликов в 'onViewCreated()' также – rafsanahmad007

+0

Мой реальный план - удалить выбранный элемент списка отсюда. Это тоже будет нормально? – Malorrr

1

Реализовать метод OnClick после установки OnClick listenser: Как это

ArrayAdapter<Object> ad = new ArrayAdapter<Object>(this, 
       android.R.layout.simple_list_item_checked, items); 
     setListAdapter(ad); 
     ListView list = getListView(); 
     list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     //list.setItemChecked(0, true); 
     list.setOnItemClickListener(this); 
1

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

MyList.setOnItemClickListener(new OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> adapter, View v, int position, 
      long arg3) 
     { 
      String value = (String)adapter.getItemAtPosition(position); 
      Toast.makeText(this,value,Toast.LENGTH_SHORT).show(); 

     } 
    }); 
1

Проблема

OnClick никогда не будет достигнуто, когда я нажимаю на мой список.

OnClickListener и OnItemClickListener являются clickevent callback интерфейс View и AdapterView соответственно. метод callback вызывается при возникновении определенного события. Поэтому вы не реализуете setOnItemClickListener в OnClick(View.OnClickListener interface).

Решение

удалить источник, связанный с View.OnClickListener

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    //... 

    MyList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) 
     { 

      Toast.makeText(getContext(), 
        "Click ListItem Number " + position, Toast.LENGTH_LONG) 
        .show(); 


     } 
    }); 

    //... 
} 

справочном

Callback functions in Java

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

  • Нет связанных вопросов^_^