android扫描q扫描内容怎么获取 按键监听顺

android扫描q扫描内容怎么获取 按键监听顺,第1张

跟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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9275527.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存