2013-04-20 3 views
-1

Я использую расширение ListFragment для отображения некоторых данных на экране. Я пытаюсь обрабатывать клики элементов списка через функцию onListItemClick, но когда я нажимаю элемент списка, эта функция не вызывается. Элемент списка даже не становится синим, когда я нажимаю. Похоже, он не чувствует мои клики. Вот мой код:onListItemClick не называется

DataListFragment.java:

public class DataListFragment extends ListFragment { 
    private CustomArrayAdapter mAdapter; 
    public void setAdapter(CustomArrayAdapter adapter) { 
     this.mAdapter = adapter; 
     setListAdapter(mAdapter); 
    } 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setEmptyText(""); 
     mAdapter = new CustomArrayAdapter(getActivity()); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // I want this function to be called 
     Log.i("DataListFragment", "Item clicked: " + id); 
    } 
} 

single_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal">  
     <TextView 
      android:id="@+id/train_info" 
      android:layout_width="270dp" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:ellipsize="marquee" 
      android:marqueeRepeatLimit="marquee_forever" 
      android:scrollHorizontally="true" 
      android:textSize="20sp" 
      android:focusable="true" 
      android:textIsSelectable="true" 
      android:focusableInTouchMode="true" 
      android:freezesText="true"> 
    </TextView>  
    <TextView 
     android:id="@+id/time_info" 
     android:gravity="center" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ellipsize="marquee" 
     android:textIsSelectable="true" 
     android:focusable="true" 
     android:focusableInTouchMode="true" 
     android:freezesText="true" 
     android:marqueeRepeatLimit="marquee_forever" 
     android:scrollHorizontally="true" 
     android:singleLine="true" 
     android:textSize="20sp" > 
    </TextView> 
</LinearLayout> 

(каждый пункт моего списка два TextViews является один ряд)

И в последний CustomArrayAdapter.java:

public class CustomArrayAdapter extends ArrayAdapter<FinalData> { 
    private final LayoutInflater mInflater; 

    public CustomArrayAdapter(Context context) { 
     super(context, android.R.layout.simple_list_item_2); 
     mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public void setData(ArrayList<FinalData> data) { 
     clear(); 
     if (data != null) { 
      for (FinalData appEntry : data) { 
       add(appEntry); 
      } 
     } 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view; 

     if (convertView == null) { 
      view = mInflater.inflate(R.layout.single_item, parent, false); 
     } else { 
      view = convertView; 
     } 

     FinalData item = getItem(position); 
     ((TextView)view.findViewById(R.id.train_info)).setEllipsize(TruncateAt.MARQUEE); 
     ((TextView)view.findViewById(R.id.train_info)).setSelected(true); 
     ((TextView)view.findViewById(R.id.time_info)).setEllipsize(TruncateAt.MARQUEE); 
     ((TextView)view.findViewById(R.id.time_info)).setSelected(true); 
     ((TextView)view.findViewById(R.id.time_info)).setText(item.getFullData()); 
     ((TextView)view.findViewById(R.id.train_info)).setText(item.getTimeData()); 

     return view; 
    } 
} 

Итак, этот код показывает все данные, которые я хочу, так, как я хочу, но не чувствую своих кликов. Элементы списка даже не становятся синими, когда я их касаюсь ...

Я просто следую инструкциям разработчика. У меня есть функция onListItemClick внутри моего фрагмента, но она не работает. Зачем?

http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html

+0

Вам нужно позвонить [setOnItemClickListener] (http://developer.android.com/reference/android/widget/AdapterView.html#setOnItemClickListener (android.widget.AdapterView.OnItemClickListener)) – adneal

+0

Где я должен написать это? – user1933770

ответ

0

вам нужно использовать itemclicklistener

и в том, что писать

parent.getItemAtPosition(position) 

Cast это значение, возвращенное выше заявление в строку, если это строка, что и используется для ваш список.

Надеюсь, что это поможет вам.

+0

Где я должен использовать itemclicklistener? – user1933770

+0

Вы должны сначала написать в listview, как listview.setOnItemClickListener (this); поэтому теперь ваш класс должен реализовать onItemClickListener и jus переопределить метод этим интерфейсом в этом классе .. это автоматически происходит в eclipse.by, и поэтому вы получаете этот метод call onListItemClicked с несколькими аргументами ... так что это его – cafebabe1991

+0

Я не понять, что не так с моим onItemClick внутри Fragment.It должен работать, но это не – user1933770

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