0

У меня есть ListView в фрагменте здесь мой текущий код для него:ListView в фрагменте Clickable и по пункту щелкнул слушателю

public static class AllSectionFragment extends Fragment { 

    public static final String ARG_SECTION_NUMBER = "section_number"; 

    public AllSectionFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_tasks_all, 
       container, false); 
     // ///////////////////////////////////////////////////////////////// 
     // Set up all components here:: ie text views , buttons lists etc.// 
     // that correspond to the layout fragment xml file    // 
     //////////////////////////////////////////////////////////////////// 
     TextView dummyTextView = (TextView) rootView 
       .findViewById(R.id.fragment_tasks_all_textView); 
     dummyTextView.setText(Integer.toString(getArguments().getInt(
       ARG_SECTION_NUMBER))); 

     ArrayList<String> arrayList = new ArrayList<String>(); 
     ListView allList = (ListView) rootView 
       .findViewById(R.id.fragment_tasks_all_list); 
     MyCustomAdapter mAdapter = new MyCustomAdapter(getActivity(), 
       arrayList); // Class to populate a ListView with an 
          // ArrayList 
     allList.setAdapter(mAdapter); 
     // Populate array list 
     for (int i = 0; i < 5; i++) { 
      arrayList.add(" All Task " + i); 
     } 
     mAdapter.notifyDataSetChanged(); 

     return rootView; 
    } 

    public void onListItemClick(ListView l, View v, int position, long id) { 
     System.out.println("pos: "+ position); 
    } 
} 

и мой файл layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".TasksActivity$DummySectionFragment" > 

<TextView 
    android:id="@+id/fragment_tasks_all_textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

<ListView 
    android:id="@+id/fragment_tasks_all_list" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="0.41" 
    android:cacheColorHint="#00000000" 
    android:clickable="true" 
    android:listSelector="@android:color/transparent" 
    android:transcriptMode="alwaysScroll" > 

</ListView> 

Прежде всего. как я могу сделать это так, чтобы я мог щелкнуть по элементу в списке,

и, во-вторых, как добавить в него слушателя onclick.

+1

Ok я у меня есть работающий кликер. Я просто добавил: 'allList.setOnItemClickListener (новый AdapterView.OnItemClickListener() { \t \t \t \t общественного недействительными onItemClick (AdapterView р, Вид вид, \t \t \t \t \t \t INT позиция, длинный идентификатор) { \t \t \t \t \t System.out.println ("позиция:" + позиция); \t \t \t \t} \t \t \t}); ', но теперь, когда я нажимаю на вид списка на устройстве, он не выделяет свет или не показывает его как щелчок. но мой лог-котенок показывает, что я щелкнул его. – Zapnologica

ответ

2

Почему бы вам не просто использовать ListFragment:

public static class ArrayListFragment extends ListFragment { 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setListAdapter(new ArrayAdapter<String>(getActivity(), 
       android.R.layout.simple_list_item_1, Shakespeare.TITLES)); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     Log.i("FragmentList", "Item clicked: " + id); 
    } 
} 
+0

Но тогда я могу только поместить список массивов в свой фрагмент? Я могу еще добавить кнопки и текст и т. Д.? – Zapnologica

+0

Почему вы не разделяете этот фрагмент на 2 или 3 фрагмента с их обязанностями. это означает, что для ваших кнопок и текста создается отдельный ListFragment и нормальный фрагмент. таким образом, вы сможете повторно использовать их в будущем. –

0

Используйте альтернативный конструктор для ArrayAdapter, который позволяет указать файл макета для размещения ListView:

public ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) 
0

У меня был подобный вопрос и был разрешен , создавая интерфейс с методом onClick и реализуя его в фрагменте. Попробуйте сделать это:

Создание интерфейса:

MyOnViewClickListener.java

public interface MyOnViewClickListener { 
    public void myOnViewClickListener(View v); 
} 

В пользовательском классе адаптера, создать конструктор проходящее MyOnViewClickListener в качестве аргумента:

private Context context; 
private MyOnViewClickListener itemListener; 
private List<String> items; 

public MyCustomAdapter(Context context, List<String> items, MyOnViewClickListener itemListener) { 

     this.itemListener = itemListener; 
     this.context = context; 
     this.items = items; 
} 

Внутри GetView() метод, говоря:

LayoutInflater inflater = getLayoutInflater(); 
View row = inflater.inflate(R.layout.your_row_layout, parent, false); 

TextView textView1 = (TextView) row.findViewById(R.id.quizchallenge); 
    textView1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      itemListener.myOnViewClickListener(v); 
     } 
}); 

Наконец, в своем классе фрагмент, реализовать новый интерфейс:

public class ListFriendFragment extends Fragment implements MyOnViewClickListener { 
. 
. 
. 
@Override 
public void myOnViewClickListener(View v){ 
    //call your method 
    quickQuiz(); 
} 

Настройка адаптера:

adapter = new MyCustomAdapter(getContext(), myItemsList, MyFragment.this); 
Смежные вопросы