2017-02-14 42 views
0

我有一個列表視圖,並希望爲這個片段中的每個項目設置一個onClickListener,但它不工作。我也想在列表視圖上設置一個contextMenu,這是行不通的無論是。點擊每個項目的listview在一個片段不起作用

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    purchasedItemsView = inflater.inflate(R.layout.purchased_items_fragment , container, false); 

    db = new StoreDataBase(getActivity() , Consts.StoreDB.DB_NAME , Consts.StoreDB.DB_VERSION); 
    storeArrayList = new ArrayList<>(); 

    listView = (ListView) purchasedItemsView.findViewById(R.id.storeListView); 
    adapter = new StoreListViewAdapter(getContext() , R.layout.store_item_row , storeArrayList); 
    listView.setAdapter(adapter); 
    adapter .notifyDataSetChanged(); 

    registerForContextMenu(listView); 
    sendData(purchasedItemsView); 

    return purchasedItemsView; 
} 


private void sendData(View view){ 

    Bundle bundle = getArguments(); 
    if (bundle != null) { 
     final String[] names = bundle.getStringArray(Constc.Data.names); 

     listView = (ListView) view.findViewById(R.id.storeListView); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       Log.e("Data" , "clicked"); 
      } 
     }); 
    }else{ 

    } 
} 

回答

0

不要重新初始化listview您在onCreateView()做一次後。因此,從方法sendData()刪除這一行:

// remove this 
listView = (ListView) view.findViewById(R.id.storeListView); 

然後你需要移動的這部分代碼if聲明之外或onCreateView()方法裏面。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     Log.e("Data" , "clicked"); 
    } 
}); 
0

點1: 看來你的數組列表是空的,所以填補一些數據

storeArrayList = new ArrayList<>(); 
//------------------------------------- 
Bundle bundle = getArguments(); 
if (bundle != null) { 
    final String[] names = bundle.getStringArray(Constc.Data.names); 
    if(names != null && names.length() > 0) { 
     storeArrayList.addAll(names); 
    } 
} 
//------------------------------------- 
listView = (ListView) purchasedItemsView.findViewById(R.id.storeListView); 
adapter = new StoreListViewAdapter(getContext() , R.layout.store_item_row , storeArrayList); 
listView.setAdapter(adapter); 

點2:你不需要 「notifyDataSetChanged();」在您設置適配器之後。

//adapter .notifyDataSetChanged(); 

點3: 用於顯示上下文菜單

listView.setOnItemLongClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 

     Log.e("Data" , "long press clicked"); 
     //show dialog or context menu dialog. 
    } 
}); 

4點使用長點擊監聽器: 評論SendData方法和使用的onclick直接

//sendData(purchasedItemsView); 
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     Log.e("Data" , "clicked"); 
    } 
}); 

希望這有助於。 投票 - 如果你喜歡它。

相關問題