2015-04-01 120 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"

这应该解决问题。