编辑:已解决。如果在项目的XML中有任何可聚焦的东西,它将打破列表的触摸,换句话说,android:focusable = false对所有复选框,开关或类似于ur列表的任何内容。并完成=)
好的,这是我的问题。
我写了一个使用标签和片段的应用程序,这一切都按照我想要的方式进行,除了当我尝试在listView上捕获onItemClick时,它甚至没有将行标记为已触摸/按下/已选择。
我一直在阅读一下,很多人也有同样的问题,但我没有找到任何帮助我的回复。
我不想实现ListFragment,事实上我甚至不知道我应该怎么做/为什么,因为我的所有代码都已经工作了,我不知道实现一个会给我更多的工作要做,所以,这里是:
是否可以在片段内部实现listView上单击的侦听器?如果是的话,怎么样?
PD:minSDK = 14,tatgetSDK = 15
答案 0 :(得分:9)
刚刚放
android:focusable="false"
android:clickable="false"
布局。 适用于所有文本视图,按钮等。
答案 1 :(得分:5)
这可能会有所帮助 raghunanadan在下面的链接回答解决了我的问题
listview OnItemClick listner not work in fragment
将其添加到布局
android:descendantFocusability="blocksDescendants"
答案 2 :(得分:4)
ListView lv;
//code to get the listView instance using findViewByID etc
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
{
Toast.makeText(EnclosingActivity.this, "Stop Clicking me", Toast.LENGTH_SHORT).show();
}
});
所有点击和回调(例如:菜单/操作栏回调)都会发送到片段绑定的活动,因此它们必须位于活动类中,而不是片段类。
答案 3 :(得分:2)
如果你从片段中扩展ListFragment,知道在你的活动创建之前不会调用mListView.setOnItemClickListener
,那么两个很棒的解决方案是这样的,正如@ dheeraj-bhaskar暗示的那样。此解决方案确保在创建活动时设置
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long rowId) {
// Do the onItemClick action
Log.d("ROWSELECT", "" + rowId);
}
});
}
在查看ListFragment的源代码时,我遇到了这个
public class ListFragment extends Fragment {
...........................................
................................................
final private AdapterView.OnItemClickListener mOnClickListener
= new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
onListItemClick((ListView)parent, v, position, id);
}
};
.................................................................
........................................................................
public void onListItemClick(ListView l, View v, int position, long id)
{
}
}
附加onItemClickListener
个对象并调用onListItemClick()
因此,以完全相同的方式工作的其他类似解决方案是覆盖onListItemClick()
@Override
public void onListItemClick(ListView l, View v, int position, long rowId) {
super.onListItemClick(l, v, position, id);
// Do the onItemClick action
Log.d("ROWSELECT", "" + rowId);
}
答案 4 :(得分:1)
如果您想将数据从片段传递到Listview上的任何活动,请单击,然后您可以修改您的代码,如...
class HistoryFragment extends Fragment { ListView historyListView;
public HistoryFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.fragment_history, container, false);
historyListView= (ListView) v.findViewById(R.id.historyDataListView);
sendRequest(); //it is my meathod to load the listview and set the adapter
return v;
}
public void onStart() {
super.onStart();
historyListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent=new Intent(getActivity(), DisplayDetails.class);
intent.putExtra("text", historyListView.getItemAtPosition((int) l).toString());
startActivity(intent);
// Toast.makeText(getActivity(),"Hello.. "+historyListView.getItemAtPosition((int) l).toString(),Toast.LENGTH_LONG).show();
}
});
}}
答案 5 :(得分:0)
以下是工作流程的概述,创建您的ListView
及其对应的Adapter
(用于将基础数据映射到ListView中的项目),将适配器设置为ListView,然后添加OnItemClickListener
。
更多详情和示例代码可在以下网址找到:http://developer.android.com/guide/topics/ui/declaring-layout.html#AdapterViews
答案 6 :(得分:-1)
按钮会影响监听器,请尝试避免使用按钮并重新编译, 它应该工作