我遇到了getChildFragmentManager方法的问题。
我用它在viewpager中创建了几个嵌套片段。这个Viewpager在PopupWindow中。 通过这种方式,片段被创建,我可以在UI中看到它们。 片段包含gridview。
不幸的是,对于Android 4.3(API 18)或更低版本,我无法选择gridview项。 同时,使用android 4.4(API 19),我可以做到!
要拦截项目点击,我使用回调来调用Activity,而Activity onAttach方法是正确的。
我认为问题是由getChildFragmentManager引起的,但我不确定。
如果有人遇到这个问题,他能解释一下他的解决方案吗?谢谢!
答案 0 :(得分:1)
我解决了我的问题。
使用Adroid 4.4我没有问题所以我没有改变我的代码。通过这种方式,我在gridview中添加了一个监听器。
gridView.setOnItemClickListener(this);
... // class extends Listener
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(DEBUG) Log.d("EmojiconGridFragment","entered");
if (mOnEmojiconClickedListener != null) {
if(DEBUG) Log.d("EmojiconGridFragment","itemClicked");
mOnEmojiconClickedListener.onEmojiconClicked((Emojicon) parent.getItemAtPosition(position));
}
}
使用android 4.3和早期版本,我必须添加代码来处理点击项目,因为点击不是正常的监听器拦截。所以,我为每个项目得到它,如下所示:
//in the adapter class for grid view insert this code
if(!Utils.hasKitKat()) {
holder.icon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("Emoicons", " clicked");
view.setSelected(true);
mOnEmojiconClickedListener.onEmojiconClicked(emoji);
}
});
}
其中Utils.HasKitkat()是检查它是否在android kitkat中运行的方法。
public static boolean hasKitKat() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
}
我希望这个解决方案对某人有用。
答案 1 :(得分:0)
我最近遇到了一个非常类似的问题但是我的情况有点不同,因为我试图在一个Android ListView中嵌入一个EditBox(GridView没有区别)。
问题是GridViewItem尝试获得焦点而不是ImageView,因此它会导致意外问题,哪个控件可以获得焦点。
可以这样想......而不是选择ImageView(你可能想要),GridViewItem正在获得焦点,而这正是造成你问题的原因。
我通过删除listview并实现ScrollViewer中包含的垂直方向的LinearView来解决这个问题,我想你可能需要考虑做同样的事情......
替代方法是将通常由ImageView单击处理的代码放在网格视图上的ItemClickListener内,而不是放在每个ImageView上。
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
}
};
这可能是一个更容易解决的问题。