2015-04-01 74 views
1

我有ListView和Adapter的問題。 ListView setOnItemClickListener和setOnItemLongClickListener不響應,但onScroll完美工作。這裏的代碼,你可能有我的解決方案...Android ListView沒有反應

在此先感謝。

public class AFragment extends Fragment { 

View rootView; 
ListView l; 
public static AArrayAdapter adapter; 

public AFragment() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.fragment_list, container, false); 
    return rootView; 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState){ 
    l = (ListView) rootView.findViewById(R.id.listView); 

    adapter = new AArrayAdapter(getActivity(), R.layout.list_item_adapter, new ArrayList<AString>()); 
    l.setAdapter(adapter); 

    l.setOnItemLongClickListener(new OnItemLongClickListener() { 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      //Toast doesn't work 
      return true; 
     } 
    }); 

    aList(); 

    l.setOnScrollListener(new OnScrollListener() { 
     private int mLastFirstVisibleItem; 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      // 
     } 
     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      if (mLastFirstVisibleItem < firstVisibleItem) { 
       // working 
      } 
      if (mLastFirstVisibleItem > firstVisibleItem) { 
       // working 
      } 
      mLastFirstVisibleItem = firstVisibleItem; 
     } 
    }); 

    l.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      //Toast doesn't work 
     } 
    }); 
} 

public void aList(){ 
    ... 
} 

/***/ 

public class AArrayAdapter extends ArrayAdapter<AString> { 
    private final Context context; 
    private List<AString> items; 

    public AArrayAdapter(Context context, int layoutResourceId, List<AString> items) { 
     super(context, layoutResourceId, items); 
     this.context = context; 
     this.items = items; 
    } 

    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     final View rowView = inflater.inflate(R.layout.list_item_adapter, parent, false); 

     AHolder holder = null; 
     holder = new AHolder(); 
     holder.acc = items.get(position); 
     holder.id = (TextView) rowView.findViewById(R.id.idLine); 
     holder.name = (TextView) rowView.findViewById(R.id.firstLine); 
     holder.value = (TextView) rowView.findViewById(R.id.secondLine); 

     rowView.setTag(holder); 

     setupItem(holder); 

     final TextView tvId = (TextView) rowView.findViewById(R.id.idLine); 
     final ImageButton imageButton = (ImageButton) rowView.findViewById(R.id.icon); 

     return rowView; 
    } 

    private void setupItem(AccHolder holder) { 
     holder.name.setText(holder.acc.getName()); 
     holder.value.setText(holder.acc.getValue()); 
     holder.id.setText(String.valueOf(holder.acc.getId())); 
     holder.removeButton = (ImageButton) rowView.findViewById(R.id.icon); 
     holder.removeButton.setTag(holder.account); 

     holder.removeButton.setFocusable(false); // <=========== :) 
    } 

    public class AHolder { 
     AString account; 
     TextView id; 
     TextView name; 
     TextView value; 
    } 
} 
} 
+1

您在監聽器方法中沒有任何代碼,您是否試圖顯示至少atast的toast? – Keshav1234 2015-04-01 11:40:13

+0

這正是我所嘗試的。 – Arnes 2015-04-01 12:02:15

+0

檢查你的listview項目xml,如果它有任何focusable元素 - http://stackoverflow.com/questions/8955270/listview-items-are-not-clickable-why – random 2015-04-02 09:34:05

回答

0

這是可能的副本 - ListView items are not clickable. why?

爲了解決這個問題,你一定沒有的ListView/GridView控件內的任何可獲得焦點項目。

所以對於按鈕/ ImageButtons必須設置:

android:focusable="false" 

如果你有ListView控件/ GridView控件內的ImageButton的,你可以切換到一個ImageView的作爲按鈕將無法點擊不管怎樣,這樣你做不需要改變可聚焦性。

另外,作爲fpr0001中的鏈接規定提供給你也可以這樣做:

這裏這個答案爲我工作:https://stackoverflow.com/a/16536355/5112161

主要是他在的LinearLayout或RelativeLayout的添加了以下內容:

android:descendantFocusability="blocksDescendants" 

您還需要從您的所有xml中刪除以下內容:

android:focusable="false" 
android:focusable="true" 
android:clickable="true" 
android:clickable="false" 
0

如果你有意見可點擊,按鈕或複選框的行中更好地利用Recyclerview。那將是一個更好choice.You可以找到Recyclerview here的基本實現。

按鈕或複選框單擊偵聽器會干擾listview點擊偵聽器。在行 的根元素中,添加一個android:descendantFocusability="beforeDescendants",android:descendantFocusability="blocksDescendants"
另請嘗試爲按鈕添加android:focusable="false"

這應該解決問題。