Android 片段中 ListView 的 setOnItemClickListener
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22164359/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
setOnItemClickListener for ListView in a fragment
提问by Paresh Mayani
I'm having problems clicking on ListView items in the fragments. I wrote the code so the fragments point to layout files for everything and inside the 2 of the layouts are ListViews, which retrieve their entries from items in a string array in the strings.xml. I could not find a way to implement a setOnItemClickListener for each ListView item in my case due to the way I wrote the code.
我在单击片段中的 ListView 项目时遇到问题。我编写了代码,因此片段指向所有内容的布局文件,其中 2 个布局是 ListViews,它们从 strings.xml 中的字符串数组中的项目中检索它们的条目。由于我编写代码的方式,在我的情况下,我找不到为每个 ListView 项目实现 setOnItemClickListener 的方法。
MainActivity.java
主活动.java
package com.example.test_app;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.view.Menu;
public class MainActivity extends FragmentActivity{
ViewPager ViewPager = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager= (ViewPager) findViewById(R.id.pager);
FragmentManager fragmentManager=getSupportFragmentManager();
ViewPager.setAdapter(new AdapterActivity(fragmentManager));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
AdapterActivity.java
适配器活动.java
package com.example.test_app;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class AdapterActivity extends FragmentStatePagerAdapter{
public AdapterActivity(FragmentManager fm){
super(fm);
}
@Override
public Fragment getItem(int i){
Fragment fragment=null;
if(i==0){
fragment=new HomeFragment();
}
if(i==1){
fragment=new CommunityFragment();
}
if(i==2){
fragment=new ResourcesFragment();
}
return fragment;
}
@Override
public int getCount(){
return 3;
}
@Override
public CharSequence getPageTitle(int position){
if(position==0){
return "Home Page";
}
if(position==1){
return "Community";
}
if(position==2){
return "Resources";
}
return null;
}
}
class HomeFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
return inflater.inflate(R.layout.home_fragment, container, false);
}
}
class CommunityFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
return inflater.inflate(R.layout.community_fragment, container, false);
}
}
class ResourcesFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
return inflater.inflate(R.layout.resources_fragment, container, false);
}
}
Then in the resources_fragment.xml layout, there is a ListView
然后在resources_fragment.xml布局中,有一个ListView
<ListView
android:id="@+id/resourcesListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/categories" >
</ListView>
It grabs entries from strings.xml
它从 strings.xml 中获取条目
<string-array name="categories">
<item>Category 1</item>
<item>Category 2</item>
<item>Category 3</item>
<item>Category 4</item>
<item>Category 5</item>
<item>Category 6</item>
<item>Category 7</item>
<item>Category 8</item>
</string-array>
I used this link to create my ListView, but the setOnItemClickListener won't work for me. How else can I connect each listview item other activities?
我使用此链接创建了我的 ListView,但 setOnItemClickListener 对我不起作用。我还能如何将每个列表视图项与其他活动连接起来?
回答by NameSpace
The place to add your ListView.SetOnItemClickListener is in your fragment creation code, after you inlfate the layouts. Use findViewById to find your ListView, and add your setOnItemClick listener.
添加您的 ListView.SetOnItemClickListener 的位置在您的片段创建代码中,在您膨胀布局之后。使用 findViewById 查找您的 ListView,并添加您的 setOnItemClick 侦听器。
class ResourcesFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.resources_fragment, container, false);
ListView lv = (ListView) view.findViewById(R.id.mylistviewid);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
// TODO Auto-generated method stub
String category = categories[position];
Class activityClass = lookupActivityClass_byName(category);
//You could lookup by position, but "name" is more general
Intent intent = new Intent(getActivity(), activityClass);
startActivity(intent);
}
});
return view;
}
回答by Paresh Mayani
When you use Fragment
, you can find views inside onCreateView()
. In simpler term, it's same as of onCreate()
of Activity
.
使用的时候Fragment
,可以在里面找到views onCreateView()
。在简单来说,它是一样的onCreate()
的Activity
。
So in this case, find ListView
inside onCreateView()
and assign onItemClickListener
there only.
所以在这种情况下,只ListView
在里面找到onCreateView()
并分配onItemClickListener
。