2017-02-14 9 views
0

私はリストビューを持っていて、このフラグメントの各アイテムにonClickListenerを設定したいが、それは機能していません。リストビューにcontextMenuを設定したいので、どちらか。フラグメント内のリストビューの各アイテムをクリックしても動作しません

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

あなたはonCreateView()で一度それを行った後listviewを再初期化しないでください。したがって、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"); 
    } 
}); 

希望を使用しています。 投票アップ - あなたが好きなら、

関連する問題