2017-02-14 47 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"); 
    } 
}); 

希望这有助于。 投票 - 如果你喜欢它。

相关问题