Java TabHost中ListView的单击事件出现问题
我有个问题。 我正在开发一个使用抽屉布局的应用程序,并参考这个示例 横向菜单工作正常,但我的片段(内容)加载了3个选项卡,每个选项卡都有一个listview,我的问题是方法onItemClick(setOnItemClickListener)不起作用,即选择一个项并不能解决任何问题。有什么想法吗?。谢谢 PS:对不起,我的英语不好 PrincipalActivity.javaJava TabHost中ListView的单击事件出现问题,java,android,listview,android-fragments,onitemclick,Java,Android,Listview,Android Fragments,Onitemclick,我有个问题。 我正在开发一个使用抽屉布局的应用程序,并参考这个示例 横向菜单工作正常,但我的片段(内容)加载了3个选项卡,每个选项卡都有一个listview,我的问题是方法onItemClick(setOnItemClickListener)不起作用,即选择一个项并不能解决任何问题。有什么想法吗?。谢谢 PS:对不起,我的英语不好 PrincipalActivity.java public class PrincipalActivity extends AppCompatActivity {
public class PrincipalActivity extends AppCompatActivity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private String[] mLeftPanel;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
initUI();
}
private void initUI(){
mLeftPanel = getResources().getStringArray(R.array.menu_array);
mDrawerLayout = (DrawerLayout) findViewById(R.id.dwrMain);
mDrawerList = (ListView) findViewById(R.id.leftPanel);
ArrayList<DrawerOption> items = new ArrayList<DrawerOption>();
items.add(new DrawerOption(R.drawable.ic_plan_visit,mLeftPanel[0]));
items.add(new DrawerOption(R.drawable.ic_clients,mLeftPanel[1]));
items.add(new DrawerOption(R.drawable.ic_search,mLeftPanel[2]));
items.add(new DrawerOption(R.drawable.ic_sinchronize,mLeftPanel[3]));
items.add(new DrawerOption(R.drawable.ic_configure,mLeftPanel[4]));
items.add(new DrawerOption(R.drawable.ic_logout, mLeftPanel[5]));
mDrawerLayout.setDrawerShadow(R.color.listViewBackground, GravityCompat.START);
mDrawerList.setAdapter(new DrawerOptionAdapter(this, items));
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
if (position == 0) {
fragmentPlanVisit(position);
getSupportActionBar().setTitle(mLeftPanel[0]);
}
......
mDrawerLayout.closeDrawers();
}
});
......
}
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem menuItem){
int id = menuItem.getItemId();
if (id == android.R.id.home){
if (mDrawerLayout.isDrawerOpen(mDrawerList)){
mDrawerLayout.closeDrawers();
}else{
mDrawerLayout.openDrawer(mDrawerList);
}
}
return super.onOptionsItemSelected(menuItem);
}
private void fragmentPlanVisit(int position){
Fragment fragment = new PlanVisitActivity();
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_fragment, fragment)
.commit();
mDrawerList.setItemChecked(position, true);
}
}
}
public class PlanVisitActivity extends Fragment {
private TabHost tabHost;
private ListView lstPlanVisitCurse;
private ListView lstPlanVisitDay;
private ListView lstPlanVisitFuture;
private ArrayList<PlanVisits> outLstPlanVisits = new ArrayList<PlanVisits>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_planvisit, container, false);
lstPlanVisitCurse = (ListView)(view.findViewById(R.id.lstPlanVisit_Tab1));
lstPlanVisitCurse.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.i("PlanVisitActivity", String.valueOf(i));
.....
.....
}
});
......
tabHost = (TabHost)(view.findViewById(R.id.tabHost));
tabHost.setup();
TabHost.TabSpec spec = tabHost.newTabSpec(getResources().getString(R.string.tab1));
spec.setIndicator(getResources().getString(R.string.tab1));
spec.setContent(R.id.tab1);
tabHost.addTab(spec);
spec = tabHost.newTabSpec(getResources().getString(R.string.tab2));
spec.setIndicator(getResources().getString(R.string.tab2));
spec.setContent(R.id.tab2);
tabHost.addTab(spec);
spec = tabHost.newTabSpec(getResources().getString(R.string.tab3));
spec.setIndicator(getResources().getString(R.string.tab3));
spec.setContent(R.id.tab3);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
getListPlanVisit();
return view;
}
private void getListPlanVisit() {
tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String s) {
int tab = tabHost.getCurrentTab();
try {
if (tab == 0) {
final PlanVisitsTask tk = new PlanVisitsTask(getActivity().getWindow().getContext(), lstPlanVisitCurse, tab);
tk.execute();
outLstPlanVisits = (ArrayList<PlanVisits>) tk.get();
} else if (tab == 1) {
final PlanVisitsTask tk = new PlanVisitsTask(getActivity().getWindow().getContext(), lstPlanVisitDay, tab);
tk.execute();
outLstPlanVisits = (ArrayList<PlanVisits>) tk.get();
} else if (tab == 2) {
final PlanVisitsTask tk = new PlanVisitsTask(getActivity().getWindow().getContext(), lstPlanVisitFuture, tab);
tk.execute();
outLstPlanVisits = (ArrayList<PlanVisits>) tk.get();
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
});
}
}
公共类PrincipalActivity扩展了AppCompatiaActivity{
私人抽屉布局mDrawerLayout;
私有列表视图mDrawerList;
私有字符串[]mLeftPanel;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
initUI();
}
私有void initUI(){
mLeftPanel=getResources().getStringArray(R.array.menu_数组);
mDrawerLayout=(抽屉布局)findViewById(R.id.dwrMain);
mDrawerList=(ListView)findViewById(R.id.leftPanel);
ArrayList items=新建ArrayList();
添加项目(新的抽屉式(R.drawable.ic_plan_Visite,mLeftPanel[0]);
添加项目(新的付款人配置(R.drawable.ic_客户,mLeftPanel[1]);
项目。添加(新的抽屉布局(R.drawable.ic_search,mLeftPanel[2]);
项目。添加(新的抽屉式(R.drawable.ic_sinchronize,mLeftPanel[3]);
添加(新的抽屉式布局(R.drawable.ic_配置,mLeftPanel[4]);
添加(新的抽屉式(R.drawable.ic_注销,mLeftPanel[5]);
mDrawerLayout.setDrawerShadow(R.color.listViewBackground,GravityCompat.START);
setAdapter(新的DrawerList.setAdapter(this,items));
mDrawerList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共虚线单击(AdapterView AdapterView,视图视图,内部位置,长l){
如果(位置==0){
残缺计划(职位);
getSupportActionBar().setTitle(mLeftPanel[0]);
}
......
mDrawerLayout.closeDrawers();
}
});
......
}
公共布尔onCreateOptions菜单(菜单){
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。主菜单,菜单);
返回super.onCreateOptions菜单(菜单);
}
公共布尔值OnOptionItemSelected(MenuItem MenuItem){
int id=menuItem.getItemId();
if(id==android.R.id.home){
if(mDrawerLayout.isDrawerOpen(mDrawerList)){
mDrawerLayout.closeDrawers();
}否则{
mDrawerLayout.openDrawer(mDrawerList);
}
}
返回super.onOptionsItemSelected(菜单项);
}
私人空间碎片计划访问(内部位置){
Fragment Fragment=新的平面可视性();
if(片段!=null){
FragmentManager FragmentManager=getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content\u片段,片段)
.commit();
mDrawerList.setItemChecked(位置,true);
}
}
}
活动\u principal.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dwrMain"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/ContentBackground"/>
<ListView
android:id="@+id/leftPanel"
android:layout_width="250dp"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:layout_gravity="start"
android:divider="@color/divideColorMenuDrawer"
android:dividerHeight="1dp"
android:background="@color/listViewBackground"
android:layout_weight="1"/>
</android.support.v4.widget.DrawerLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/ContentBackground"
android:focusable="false"
android:focusableInTouchMode="false">
<TabHost
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tabHost"
android:layout_gravity="center_horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"></TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/lstPlanVisit_Tab1"
android:divider="@color/divideColorlistView"
android:dividerHeight="1dp"
android:background="@color/listViewBackground"
android:choiceMode="singleChoice"/>
</LinearLayout>
<LinearLayout
android:id="@+id/tab2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/lstPlanVisit_Tab2"
android:divider="@color/divideColorlistView"
android:dividerHeight="1dp"
android:background="@color/listViewBackground"
android:choiceMode="singleChoice" />
</LinearLayout>
<LinearLayout
android:id="@+id/tab3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/lstPlanVisit_Tab3"
android:divider="@color/divideColorlistView"
android:dividerHeight="1dp"
android:background="@color/listViewBackground"
android:choiceMode="singleChoice" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
planVisitivity.java
public class PrincipalActivity extends AppCompatActivity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private String[] mLeftPanel;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
initUI();
}
private void initUI(){
mLeftPanel = getResources().getStringArray(R.array.menu_array);
mDrawerLayout = (DrawerLayout) findViewById(R.id.dwrMain);
mDrawerList = (ListView) findViewById(R.id.leftPanel);
ArrayList<DrawerOption> items = new ArrayList<DrawerOption>();
items.add(new DrawerOption(R.drawable.ic_plan_visit,mLeftPanel[0]));
items.add(new DrawerOption(R.drawable.ic_clients,mLeftPanel[1]));
items.add(new DrawerOption(R.drawable.ic_search,mLeftPanel[2]));
items.add(new DrawerOption(R.drawable.ic_sinchronize,mLeftPanel[3]));
items.add(new DrawerOption(R.drawable.ic_configure,mLeftPanel[4]));
items.add(new DrawerOption(R.drawable.ic_logout, mLeftPanel[5]));
mDrawerLayout.setDrawerShadow(R.color.listViewBackground, GravityCompat.START);
mDrawerList.setAdapter(new DrawerOptionAdapter(this, items));
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
if (position == 0) {
fragmentPlanVisit(position);
getSupportActionBar().setTitle(mLeftPanel[0]);
}
......
mDrawerLayout.closeDrawers();
}
});
......
}
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem menuItem){
int id = menuItem.getItemId();
if (id == android.R.id.home){
if (mDrawerLayout.isDrawerOpen(mDrawerList)){
mDrawerLayout.closeDrawers();
}else{
mDrawerLayout.openDrawer(mDrawerList);
}
}
return super.onOptionsItemSelected(menuItem);
}
private void fragmentPlanVisit(int position){
Fragment fragment = new PlanVisitActivity();
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_fragment, fragment)
.commit();
mDrawerList.setItemChecked(position, true);
}
}
}
public class PlanVisitActivity extends Fragment {
private TabHost tabHost;
private ListView lstPlanVisitCurse;
private ListView lstPlanVisitDay;
private ListView lstPlanVisitFuture;
private ArrayList<PlanVisits> outLstPlanVisits = new ArrayList<PlanVisits>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_planvisit, container, false);
lstPlanVisitCurse = (ListView)(view.findViewById(R.id.lstPlanVisit_Tab1));
lstPlanVisitCurse.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.i("PlanVisitActivity", String.valueOf(i));
.....
.....
}
});
......
tabHost = (TabHost)(view.findViewById(R.id.tabHost));
tabHost.setup();
TabHost.TabSpec spec = tabHost.newTabSpec(getResources().getString(R.string.tab1));
spec.setIndicator(getResources().getString(R.string.tab1));
spec.setContent(R.id.tab1);
tabHost.addTab(spec);
spec = tabHost.newTabSpec(getResources().getString(R.string.tab2));
spec.setIndicator(getResources().getString(R.string.tab2));
spec.setContent(R.id.tab2);
tabHost.addTab(spec);
spec = tabHost.newTabSpec(getResources().getString(R.string.tab3));
spec.setIndicator(getResources().getString(R.string.tab3));
spec.setContent(R.id.tab3);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
getListPlanVisit();
return view;
}
private void getListPlanVisit() {
tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String s) {
int tab = tabHost.getCurrentTab();
try {
if (tab == 0) {
final PlanVisitsTask tk = new PlanVisitsTask(getActivity().getWindow().getContext(), lstPlanVisitCurse, tab);
tk.execute();
outLstPlanVisits = (ArrayList<PlanVisits>) tk.get();
} else if (tab == 1) {
final PlanVisitsTask tk = new PlanVisitsTask(getActivity().getWindow().getContext(), lstPlanVisitDay, tab);
tk.execute();
outLstPlanVisits = (ArrayList<PlanVisits>) tk.get();
} else if (tab == 2) {
final PlanVisitsTask tk = new PlanVisitsTask(getActivity().getWindow().getContext(), lstPlanVisitFuture, tab);
tk.execute();
outLstPlanVisits = (ArrayList<PlanVisits>) tk.get();
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
});
}
}
公共类平面可视性扩展片段{
私有TabHost TabHost;
私有ListView lstPlanVisitCourse;
私有列表视图lstPlanVisitDay;
私有列表视图lstPlanVisitFuture;
private ArrayList outlstplanvisions=new ArrayList();
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.activity\u planvisit,容器,false);
lstplanvisitCourse=(ListView)(view.findViewById(R.id.lstPlanVisit_Tab1));
lstplanvisitCourse.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
Log.i(“平面可视性”,String.valueOf(i));
.....
.....
}
});
......
tabHost=(tabHost)(view.findviewbyd(R.id.tabHost));
tabHost.setup();
TabHost.TabSpec spec=TabHost.newTabSpec(getResources().getString(R.string.tab1));
spec.setIndicator(getResources().getString(R.string.tab1));
规格设置内容(R.id.tab1);
tabHost.addTab(spec);
spec=tabHost.newTabSpec(getResources().getString(R.string.tab2));
spec.setIndicator(getResources().getString(R.string.tab2));
规格设置内容(R.id.tab2);
tabHost.addTab(spec);
spec=tabHost.newTabSpec(getResources().getString(R.string.tab3));
spec.setIndicator(getResources().getString(R.string.tab3));
规格设置内容(R.id.tab3);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
getListPlanVisit();
返回视图;
}
私有void getListPlanVisition(){
tabHost.setOnTabChangedListener(新tabHost.ontabchangedListener(){
@凌驾
已更改的公共无效项(字符串s){
int tab=tabHost.getCurrentTab();
试一试{
如果(制表符==0){
final PlanVisitTask tk=新的PlanVisitTask(getActivity().getWindow().getContext(),LstPlanVisitCourse,选项卡);
tk.execute();
outlstplanvists=(ArrayList)tk.get();
}else if(tab==1){
最终计划访问任务tk=新计划访问任务(getActivity().getWindow().getContext(),lstPlanVisitDay,选项卡);
tk.execute();
outlstplanvists=(ArrayList)tk.get();
}否则,如果(制表符==2){
final PlanVisitTask tk=新的PlanVisitTask(getActivity().getWindow().getContext(),lstPlanVisitFuture,选项卡);
tk.execute();
outlstplanvists=(ArrayList)tk.get();
}
}捕捉(中断异常e){
e、 printStackTrace();
}捕获(执行例外){
e、 printStackTrace();
}
}
});
}
}