2014-04-14 105 views
-1

我正在使用一個活動,根據點擊按鈕顯示幾個片段。我在Fragment中實現了一個自定義列表視圖,但由於某種原因,它根本不會被選中。Android的listview onclicklistener片段

看起來好像onItemClicklistener()根本沒有響應,即使我已經在行選擇上設置了佈局。這裏是我的列表視圖的XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:divider="#b5b5b5" 
     android:dividerHeight="1dp" 
     android:listSelector="@drawable/list_selector" 
     android:descendantFocusability="blocksDescendants"  
     android:clickable="true" 

     /> 

</LinearLayout> 

這裏爲每個行佈局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/list_selector" 
    android:orientation="horizontal" 
    android:padding="5dip" 

    > 
    <!-- ListRow Left sied Thumbnail image --> 

    <LinearLayout 
     android:id="@+id/thumbnail" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:padding="3dip" 

     > 

     <ImageView 
      android:id="@+id/list_image" 
      android:layout_width="55dip" 
      android:layout_height="60dip" 
      android:layout_weight="1" 
      android:focusable="false"   
      android:src="@drawable/marker_blog_orange" 
      /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/thumbnail" 
     android:layout_toRightOf="@+id/thumbnail" 
     android:text="Location here" 
     android:textColor="#10bcc9" 
     android:textSize="15dip" 
     android:textStyle="bold" 
     android:typeface="sans" 
     android:focusable="false" 

     /> 

    <!-- Artist Name --> 
    <!-- 
    <TextView 
     android:id="@+id/artist" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/title" 
     android:layout_marginTop="1dip" 
     android:layout_toRightOf="@+id/thumbnail" 
     android:text="user here" 
     android:textColor="#343434" 
     android:textSize="10dip" /> 
--> 

    <!-- Rightend--> 

    <TextView 
     android:id="@+id/duration" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignTop="@id/title" 
     android:layout_marginRight="5dip" 
     android:gravity="right" 
     android:text="distance" 
     android:textColor="#10bcc9" 
     android:textSize="10dip" 
     android:textStyle="bold" 
     android:focusable="false" 

     /> 

    <!-- Rightend Arrow --> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:focusable="false" 
     android:src="@drawable/arrow" /> 

    <RatingBar 
     android:id="@+id/ratingB1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/thumbnail" 
     android:layout_toLeftOf="@+id/imageView1" 
     android:numStars="5" 
     android:focusable="false" 
     android:layout_below="@id/title"/> 

</RelativeLayout> 

最後這裏是我retrive從服務器的一些數據,並添加onitemclicklistner()類:

public class CustomizedListView extends Fragment implements OnItemClickListener{ 
    // All static variables 


    static final String KEY_ID = "id"; 
    static final String KEY_TITLE = ""; 
    static final String Area ="Area"; 
    static final String KEY_lat = ""; 
    static final String KEY_lng = ""; 
    static final String KEY_THUMB_URL = "thumb_url"; 
    static final String MetersAway=""; 

    ListView list; 
    LazyAdapter adapter; 

    HashMap<String, String> marker; 

    Context context; 

    private float rtn; 
    public String TAG; 

     public View inst = null; 
     ArrayList<HashMap<String, String>> locationList; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     context = getActivity(); 
     final View rootView = inflater.inflate(R.layout.main, container, false); 


     locationList = new ArrayList<HashMap<String, String>>(); 
     list=(ListView)rootView.findViewById(R.id.list); 
     retData(); 
     list.setOnItemClickListener(new OnItemClickListener() { 

        @Override 
        public void onItemClick(AdapterView<?> parent, View view, 
          int position, long id) { 
      Toast.makeText(getActivity(), "yoho",Toast.LENGTH_SHORT).show(); 

        } 
       }); 


     return rootView; 
    } 

    public void retData(){ 

     new Retrieve().execute();//extends asyntask and gets data from my server 

    } 

} 
+1

你有android:descendantFocusability =「blocksDescendants」在你的android:id =「@ + id/list」 爲什麼?刪除它可能會使點擊處理程序工作嗎? –

+0

是的,將它設置爲blockDescendant導致它阻止它的後代獲得焦點。不知道如果多數民衆贊成在這個問題 – Android2390

+0

我刪除它,但仍然無法選擇列表視圖:s – Orochi1992

回答

0

您的setOnItemClickListenerOnItemClickListener()被放置在片段內。

做這樣的:

公共類CustomizedListView擴展片段實現OnItemClickListener {

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

    //the things you want to declare and call 

    View rootView = inflater.inflate(R.layout.main, container, false); 
    list=(ListView)rootView.findViewById(R.id.list); 
    list.setOnClickListener(this); 

    return rootView; 
    } 


@Override 
public void OnClick(View v) { 
    Toast.makeText(getActivity(), "yoho",Toast.LENGTH_SHORT).show(); 
} 

又讀http://developer.android.com/reference/android/view/ViewGroup.html#attr_android:descendantFocusability 我不知道,如果android:descendantFocussablity導致ListView控件沒有獲得焦點

+0

嘗試過它仍然是同樣的問題:s – Orochi1992