2013-04-20 65 views
-1

我使用ListFragment的扩展来在屏幕上显示一些数据。我尝试通过onListItemClick函数来处理列表项的点击,但是当我点击list元素时,这个函数不会被调用。当我单击时,列表元素甚至不会变蓝。看起来它感觉不到我的点击。这里是我的代码: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; 
    } 
} 

因此,此代码以我想要的方式显示我想要的所有数据,但不会感觉到我的点击。当我触摸它们时,列表中的项目甚至不会变蓝......

我只关注android开发人员指南之一。我在我的片段中有一个函数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 2013-04-20 19:47:57

+0

我应该在哪里写这个? – user1933770 2013-04-21 06:55:31

回答

0

你需要使用 itemclicklistener

,并在写

parent.getItemAtPosition(position) 

演员通过上面的语句返回到一个String此值,如果它是一个字符串,美用于你的列表视图。

希望it.helps你。

+0

我应该在哪里使用itemclicklistener? – user1933770 2013-04-21 06:47:50

+0

你应该先写信给listview.setOnItemClickListener(this);所以现在你的类应该实现onItemClickListener,并在该类中使用此接口重写方法。这会自动发生在eclipse.by中,因此你可以调用onListItemClicked,它只有很少的参数...因此它就是 – cafebabe1991 2013-04-21 06:49:03

+0

我没有了解我的onItemClick里面的Fragment有什么问题。它应该可以工作,但它不会 – user1933770 2013-04-21 07:09:53