跟activity一样的设置package comhuaaofragment;import androidappActivity;import androidappFragment;import androidosBundle;import androidutilLog;import androidviewLayoutInflater;import androidviewView;import androidviewViewOnClickListener;import androidviewViewGroup;import androidwidgetButton;public class BtFragment extends Fragment implements OnClickListener { private Button login; private Button reg;@Override public void onAttach(Activity activity) { // TODO Auto-generated method stub superonAttach(activity); Logi("i"," Fragment 执行onAttach"); } @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub superonCreate(savedInstanceState); Logi("i"," Fragment 执行onCreate"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub Logi("i"," Fragment 执行onCreateView"); View view = inflaterinflate(Rlayoutmain1, null, false); login = (Button) viewfindViewById(Ridlogin); reg = (Button) viewfindViewById(Ridreg); loginsetOnClickListener(this); regsetOnClickListener(this); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub superonActivityCreated(savedInstanceState); Logi("i"," Fragment 执行onActivityCreated");} @Override public void onStart() { // TODO Auto-generated method stub superonStart(); Logi("i"," Fragment 执行onStart"); } @Override public void onPause() { // TODO Auto-generated method stub superonPause(); Logi("i"," Fragment 执行onPause"); } @Override public void onResume() { // TODO Auto-generated method stub superonResume(); Logi("i"," Fragment 执行onResume"); } @Override public void onStop() { // TODO Auto-generated method stub superonStop(); Logi("i"," Fragment 执行onStop"); } @Override public void onDestroy() { // TODO Auto-generated method stub superonDestroy(); Logi("i", " Fragment 执行onDestroy"); } @Override public void onDetach() { // TODO Auto-generated method stub superonDetach(); Logi("i"," Fragment 执行onDetach"); } @Override public void onClick(View v) { // TODO Auto-generated method stub int id = vgetId(); switch (id) { case Ridlogin: ((MainActivity) getActivity())showLogin(); break; case Ridreg://点击时要执行的 *** 作 放在MainActivity 的showReg()方法中 ((MainActivity)getActivity())showReg(); break; default: break; } }}
当我们使用ExpandableListView时,实现点击一个GroupView则展开ChidView,那么这个时候,Adapter的大小前后是有变化的。
例如:假设有20个GroupView,每个GroupView都有一个ChildView。当全部GroupView都没有被展开的时候,Adapter的size是20;而当我们展开一个GroupView,显示出一个ChildView的时候,Adapter的size就增加了1。这个必须了解的。
当我们需要添加长按每一个GroupView的时候,获取当前被长按的GroupView的对象时,使用以下方法会出现如下问题。
[java]
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
superonCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflaterinflate(Rmenubooklist_context, menu);
ExpandableListViewExpandableListContextMenuInfo info = (ExpandableListViewExpandableListContextMenuInfo) menuInfo;
// 获取当前长按项的下标
final int index = ExpandableListView
getPackedPositionGroup(infopackedPosition);
//Systemoutprintln("index----------->" + index);
//Systemoutprintln("Adapter的size------------->" + expListViewgetAdapter()getCount());
mBookInfo = (BookInfoDTO) expListViewgetAdapter()getitem(index);
}
1、当所有的GroupView都没有展开的时候,能够正确获取每个GroupView的下标,通过Adapter就能得到绑定到这个GroupView中的对象。
2,、但,当有的GroupView被展开的时候,就不能使用上面的方法获取绑定在GroupView中的对象了。原因上面已经给出,因为此时的Adapter的size已经被改变。而此时获取的下标是20个GroupView的相对下标。跟Adapter中的下标所对应的对象并不一致,因为Adapter中还包含了被展开的ChildView。
使用以下的方法可以解决上面遇到的问题。
[java]
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
superonCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflaterinflate(Rmenubooklist_context, menu);
ExpandableListViewExpandableListContextMenuInfo info = (ExpandableListViewExpandableListContextMenuInfo) menuInfo;
View vin = (View)infotargetView;
mBookInfo = (BookInfoDTO)vingetTag();
}
在设配器中,为每一个GroupView set 一个Tag,也就是我们需要长按时候提出的对象。
这样我们就可以在以上的方法中取出每个GroupView中 的Tag,也就是我们绑定到GroupView中的对象。
这样就不用依赖于变化的Index。
android 中的menu一般是指上下文菜单或者是选项菜单
其中上选项菜单是可以在布局中res下的menu中在xml布局中写好布局来的然后通过java代码中的onCreateOptionsMenu来加载选项菜单,android44高级版本后是自动把菜单加载到标题栏上的,而不是低版本的按下menu键才显是出来的,上下文菜单是是通过onCreateContextMenu这个方法来注册上下文菜单的
下面讲讲如何获取menu中的item
获取上下文菜单的item其实就是当单机选项菜单时会触发这个方法
public boolean onContextItemSelected(MenuItem mi){//判断单击的是哪个菜单项,并针对性的作出响应。
switch (migetItemId()){
case FONT_RED:
titlesetTextColor(ColorRED);
break;
case FONT_GREEN:
titlesetTextColor(ColorGREEN);
break;
case FONT_BLUE:
titlesetTextColor(ColorBLUE);
break;
case MENU1:
createdialog();
break;
}
return true;
}
获取选项菜单的item其实就是当单击选项菜单时会触发这个方法
public boolean onMenuItemSelected(int featureId, MenuItem item) {// 利用switch根据ItemId区分点击的是哪个菜单 以便正确响应用户 *** 作
MenuItem temp= item;
switch (itemgetItemId()) {
case Ridrename:
createdialog();
break;
case Ridred:
titlesetTextColor(ColorRED);
break;
case Ridgreen:
titlesetTextColor(ColorGREEN);
break;
case Ridblue:
titlesetTextColor(ColorBLUE);
break;
// case Ridchoose_color:
// createpopupmenu(temp);
// break;
}
return superonMenuItemSelected(featureId, item);
}
这是我之前解决这个问题写的东西,直接贴上来,你看下吧。
private
List<Boolean>
originalFoundedDevicesState;
//有一个保存状态的list
给listview绑定adapter:
private
CheckAdapter
foundedDevices;
private
ListView
foundedList;
foundedDevices=new
CheckAdapter(AddingDevicesActthis,originalFoundedDevices,originalFoundedDevicesState);
foundedListsetAdapter(foundedDevices);
foundedListsetItemsCanFocus(false);foundedListsetChoiceMode(ListViewCHOICE_MODE_MULTIPLE);
foundedListsetOnItemClickListener(new
OnItemClickListener(){
public
void
onItemClick(AdapterView<>
parent,
View
view,
int
position,
long
id)
{
//
TODO
Auto-generated
method
stub
}
});
2自己为checkbox复写个adapter:
class
CheckAdapter
extends
BaseAdapter{
Context
mContext;
List<Device>
mData;
List<Boolean>status;
LayoutInflater
mInflater;
CheckBox
checkBox;
HashMap<Integer,View>
lmap=new
HashMap<Integer,View>();
public
CheckAdapter(Context
context,List<Device>
data,List<Boolean>
DeviceStatus)
{
mInflater=LayoutInflaterfrom(context);
mData=data;
status=DeviceStatus;
}
public
int
getCount()
{
//
TODO
Auto-generated
method
stub
return
mDatasize();
}
public
Object
getItem(int
position)
{
//
TODO
Auto-generated
method
stub
return
mDataget(position);
}
public
long
getItemId(int
position)
{
//
TODO
Auto-generated
method
stub
return
position;
}
public
View
getView(final
int
position,
View
convertView,
ViewGroup
parent)
{
//
TODO
Auto-generated
method
stub
if(lmapget(position)==null)
{
convertView=mInflaterinflate(Rlayoutchild,parent,
false);
checkBox=(CheckBox)convertViewfindViewById(Riddevices);
convertViewsetTag(checkBox);
}
else
{
checkBox=(CheckBox)convertViewgetTag();
}
checkBoxsetId(position);
checkBoxsetChecked(statusget(position));
checkBoxsetText(mDataget(position)toString());
checkBoxsetOnCheckedChangeListener(new
OnCheckedChangeListener(){
public
void
onCheckedChanged(CompoundButton
buttonView,
boolean
isChecked)
{
//
TODO
Auto-generated
method
stub
statusset(buttonViewgetId(),
isChecked);
notifyDataSetChanged();
}
});
return
convertView;
}
3最后可以根据其是否被选中状态判断某项是否被选中,并提取id:
for(num1=0;num1<originalFoundedDevicesStatesize();num1++)
{
if(originalFoundedDevicesStateget(num1))
finalPairedDevicesadd(new
Device(originalFoundedDevicesget(num1)getName(),
originalFoundedDevicesget(num1)getAddress()));
}
在使用fragment时首先要知道fragment的生命周期,我们能在生命周期方法中做什么 *** 作
onAttch(Activity activity):这个方法是在fragment与activity关联之后调用,我们能在这个方法中获取这个关联的activity的实例。但是当你的sdk更新到android60(api-23)是就会显示这个方法是过时的,使用onAttach(Context context)这个方法代替,但在看fragment的生命周期时,这个方法好像不调用,所以你获取的Context是null
onCreate:这个方法是在fragment初始化的时候调用,我们通常在这个方法中使用getArgument获取activity传来的初始化fragment的参数。
注意:在 这个方法中我们不能获取activity中的控件,下面的这段代码是在fragment的onCreate中的,你发现activity不是空,但是text是null。因为,这是activity的onCreate还没有执行完,即activity还没有创建完,要想获取activity相关的资源应该在onActivityCreated中获取。
[java] view plain copy
MainActivity activity=(MainActivity) getActivity();//activity不是null
TextView text=activityfindViewById(Ridtextview);//text是null
onCreateView:这个方法中我们主要是通过布局填充器获取fragment布局。我们在这个方法中通过viewfindViewById初始化fragment中的控件,
[java] view plain copy
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view=inflaterinflate(Rlayouttext_content, null);//获取布局
text=(TextView) viewfindViewById(Ridtextview);//初始化fragment的控件
return view;
}
onActivityCreated:这个方法是在activity的onCreate方法执行完执行这个方法,通知fragment,关联的activity的onCreate方法执行完了,即activity创建完了,可以在这个方法中获取activity中的资源。例如下面,可以获取activity布局中的TextView控件
[java] view plain copy
@Override
public void onActivityCreated(Bundle savedInstanceState) {
superonActivityCreated(savedInstanceState);
TextView text=getActivity()findViewById(Ridtextview);//获取activity布局中的TextView控件
}
onStart:这个是在activity的onstart执行完立即执行,这个方法执行完fragment界面就显示出来了,但是现在还没有获取焦点,用户是不能 *** 作。
onResume:这个方法是在activity的onResume方法执行完立即执行,此时fragment的获取了界面,用户可以 *** 作。
onPause:fragment失去焦点,此时用户是不能 *** 作的,执行完立即执行activity的onPause方法。
onStop:fragment不可见,执行完立即执行activity的onStop方法。
onDestroyView:在onCreateView中创建的fragment视图会被销毁。Fragment的视图被回收。
onDestroy:当这个fragment不再使用时调用。需要注意的是,它即使经过了onDestroy()阶段,但仍然能从Activity中找到,因为它还没有Detach
onDetach:fragment与activity解除关联,fragment的所有的资源都被回收。
以上就是关于android扫描q扫描内容怎么获取 按键监听顺全部的内容,包括:android扫描q扫描内容怎么获取 按键监听顺、ExpandableListView如何获得当前焦点是在group上还是在child上、android menu 怎么得到item等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)