1

我想實現一個listView使用自定義arrayAdapter。我可以看到我的列表,但是當我嘗試選擇列表中的一個選項時,我的實現方法onItemClick不起作用。我在StackOverflow中看到過類似的問題,但是沒有提供的解決方案適用於我...我試過android:descendantFocusability="blocksDescendants"android:clickable="false"android:focusable="false"作爲我列表中每一行的元素,而且我也嘗試過MainActivity.java來實現onItemClick,但它不起作用。我知道我必須有一個錯誤在我的代碼,但我不能找到它...onItemClickListener在列表視圖不起作用

這裏是我的代碼:

guia_general_list.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#E6CEC1" 
android:orientation="horizontal" > 

<ListView 
    android:id="@+id/lstOpciones" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="top|center" 
    android:background="#E6CEC1" /> 

</LinearLayout> 

item_elements.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/layoutGeneral" 
android:layout_width="match_parent" 
android:layout_height="55dp" 
android:background="@drawable/menu_selector_bar" 
android:clickable="true" 
android:focusable="true" 
android:orientation="horizontal" > 

<ImageView 
    android:id="@+id/ivQueVerElement" 
    android:layout_width="65dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_vertical" 
    android:paddingBottom="1dp" 
    android:paddingLeft="1dp" 
    android:paddingTop="1dp" 
    android:scaleType="fitXY" /> 

<TextView 
    android:id="@+id/txtOptionName" 
    android:layout_width="0dp" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center_vertical" 
    android:layout_weight="1" 
    android:gravity="center_vertical" 
    android:paddingLeft="5dp" 
    android:textColor="#FFFFFF" 
    android:textStyle="bold" /> 

<ImageView 
    android:id="@+id/ivVerOpcion" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="right|center_vertical" 
    android:src="@drawable/navigation_next_item" /> 

</LinearLayout> 

ElementsAdapter.java

public class ElementsAdapter extends ArrayAdapter<OptionList>{ 

int layoutResourceId; 
Context context; 
OptionList data[] = null; 

public ElementsAdapter(Context context, int layoutResourceId, OptionList[] data) { 
    super(context, layoutResourceId, data); 
    this.layoutResourceId = layoutResourceId; 
    this.context = context; 
    this.data = data; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    OptionListHolder holder = null; 

    if(row == null){ 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new OptionListHolder(); 
     holder.imgIcon = (ImageView)row.findViewById(R.id.ivQueVerElement); 
     holder.txtTitle = (TextView)row.findViewById(R.id.txtOptionName); 

     row.setTag(holder); 
    }else{ 
     holder = (OptionListHolder)row.getTag(); 
    } 

    OptionList option = data[position]; 
    holder.txtTitle.setText(option.getOptionName()); 
    holder.imgIcon.setImageResource(option.getImageName()); 

    LinearLayout layoutItem = (LinearLayout) row.findViewById(R.id.layoutGeneral); 


    return row; 
} 

static class OptionListHolder{ 
    ImageView imgIcon; 
    TextView txtTitle; 
} 

public int getCount() { 
    return data.length; 
} 


public OptionList getItem(int position) { 
    return ((OptionList)data[position]); 
} 

public long getItemId(int position) { 
    return position; 
} 


} 

MainActivity.java:

public class MainActivity extends Activity{ 

ArrayAdapter<String> adaptador; 

public MainActivity() { 
    // TODO Auto-generated constructor stub 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.guia_general_list); 

} 

@Override 
protected void onResume() { 
     super.onResume(); 

    OptionList optionListData[] = new OptionList[]{ 
      new OptionList("Option1", R.drawable.image1), 
      new OptionList("Option2", R.drawable.image2), 
      new OptionList("Option3", R.drawable.image3) 
    }; 

    ElementsAdapter adapter = new ElementsAdapter(this, R.layout.item_elements, optionListData);   

    ListView lstOptions = (ListView)findViewById(R.id.lstOpciones); 

    lstOptions.setAdapter(adapter); 

lstOptions.setOnItemClickListener(new OnItemClickListener(){ 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id){ 

      Toast.makeText(getApplicationContext(), "ENTRA!", Toast.LENGTH_LONG).show(); 
      Log.d("xxx","AAA: Position: "+position); 

      } 

     } 
    }); 


} 

}

誰能幫助我?

預先感謝您!

+0

刪除您在適配器的線性佈局上設置的點擊偵聽器。刪除XML中的android:focusable,android:descendantFocusability和android:clickable元素,因爲它們對點擊沒有影響。 – dymmeh 2013-02-27 18:50:28

+0

謝謝你的回答。我刪除了適配器中的點擊偵聽器。起初我沒有,但我正在嘗試一切......但它仍然無法正常工作。 – Ana 2013-02-27 18:58:50

+0

那麼,除了點擊偵聽器和XML元素,我指出一切看起來都不錯。 – dymmeh 2013-02-27 19:06:41

回答

0

除了item_elements.xml,您的代碼看起來不錯。那裏的視圖是可點擊和/或可調焦的。

這兩行,的部分必須被去除,以得到所謂的onItemClickekdListener:

android:clickable="true" 
android:focusable="true" 
android:descendantFocusability="blocksDescendants" 

其他android:clickableandroid:focusable屬性整個item_elements.xml是不必要的,但他們不應該引起你的問題。

+0

謝謝你的回答!但是,您是否需要將'android:clickable'和'android:focusable'設置爲true以便能夠單擊任何元素?我刪除了'android:descendantFocusability =「blocksDescendants」'現在我有我的代碼,因爲我編輯了...仍然不工作! – Ana 2013-02-28 11:22:57

相關問題