0

我已經看到所有相關的問題,並嘗試了他們的答案。我有一個ListView裏面的一個片段,它是onItemClick方法在一個活動內被調用,但在另一個活動時不被調用。其他一切都是一樣的。我試過了:ListView onItemClick不叫

  • 顯式更改android:clickable
  • 顯式更改android:focusableandroid:focusableInTouchMode
  • 打電話listView.setItemsCanFocus
  • 在片段和活動根上添加android:descendantFocusability="blocksDescendants"屬性。

不過,它不工作。它與具有相同適配器的片段相同,它不具有關於在哪個活動中的條件。但是,在一項活動中它完美地起作用,而在另一項活動中,不會調用onItemClick。我在ICS上。爲什麼會發生?

UPDATE:

這裏是我的片段中的相關代碼:

dataSource = (ArrayList<Map<String, Object>>) task.getResult();
  
FeedAdapter adapter = new FeedAdapter(getActivity(), dataSource, getUser());
  
ListView list = (ListView) rootView.findViewById(R.id.listView);
  
list.setItemsCanFocus(true);
 //just trying these 
list.setOnItemClickListener(self);
  
list.setAdapter(adapter);
  
adapter.notifyDataSetChanged();
  
if (dataSource.size() == 0) {
  
    noPostsLabel.setVisibility(View.VISIBLE);
  
} 

而且在我的適配器:

public View getView(int position, View convertView, ViewGroup parent) { 
    View view; 
    final Map<String, Object> post = objects.get(position); 
    LayoutInflater inflater = LayoutInflater.from(getContext()); 
    if (convertView == null || convertView.getId() == R.id.headerRoot) { 
     view = inflater.inflate(R.layout.list_item_post_layout, parent, false); 
    } else { 
     view = convertView; 
    } 
    view.setClickable(false); //just trying these two now, they weren't here originally 
    view.setFocusable(false); 
    //populate 
    view.setTag(post); 

    [...] //populate the cell. very long code, redacted. 

    return view; 

} 

更新2:

我還有當我的「工作」活動中也實現了某些單元格時,如果它們在單元格中有一個可見的Horizo​​ntalScrollView(我有文件附加功能並且只有存在文件時纔可見),也不能選擇這些單元格。否則,它在GONE可見性狀態)。我不知道爲什麼會造成這樣的麻煩。

更新3:

我還發現,在細胞內部的意見響應。這只是單元格視圖本身,而不是輸入。

UPDATE 4:

我已經結束了自來水處理程序邏輯移動,而不是依靠列表視圖中的處理程序的單元佈局本身。我知道這不是一個好的做法,但我必須遵守最後期限。此外,它現在工作非常順利。由於技術問題仍然存在,我沒有關閉/回答問題,我還沒有找到真正的解決方案。我剛剛使用了一種解決方法來滿足我的項目截止日期。

+0

某些代碼可能有助於解決問題。 –

+0

@EugeneH從哪裏來? –

+0

從你的兩個片段和與帖子相關的活動。接口回調(如果有),列表實現。 –

回答

1

我不確定您的問題,也沒有看到完整的代碼進行調試。 我會提交一個通常應該在Fragment中工作的示例代碼。

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

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int positi on, long id) { 
      Log.d(TAG, "onItemClick"); 
    } 
    }); 

注:

  • 我不使用root或者其他任何緩存的對象。我使用view參數來調用findViewById()。
  • 我也不知道自己。相反,我實例化了一個新視圖或AdapterView。
+0

'自我'是方法中對'this'的最終引用,從內部類被調用。 –