我想为每个listview项打开一个活动。做了一些关于onitemclickListener的研究但是不太了解如何适应我当前的代码。
我的活动叫做:
BhutanInfo.java
ColumbiaInfo.java
我的列表视图在xml文件中设置:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="country_names">
<item>Bhutan</item>
<item>Colombia</item>
</string-array>
<array name="country_icons">
<item>@drawable/bhutan</item>
<item>@drawable/colombia</item>
</array>
</resources>
在我的班级档案中,我有以下内容:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Context ctx = getApplicationContext();
Resources res = ctx.getResources();
String[] options = res.getStringArray(R.array.country_names);
TypedArray icons = res.obtainTypedArray(R.array.country_icons);
setListAdapter(new ImageAndTextAdapter(ctx, R.layout.main_list_item, options, icons));
}
我还有另一个设置适配器的类。
public class ImageAndTextAdapter extends ArrayAdapter<String> {
private LayoutInflater mInflater;
private String[] mStrings;
private TypedArray mIcons;
private int mViewResourceId;
public ImageAndTextAdapter(Context ctx, int viewResourceId,
String[] strings, TypedArray icons) {
super(ctx, viewResourceId, strings);
mInflater = (LayoutInflater)ctx.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
mStrings = strings;
mIcons = icons;
mViewResourceId = viewResourceId;
}
@Override
public int getCount() {
return mStrings.length;
}
@Override
public String getItem(int position) {
return mStrings[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = mInflater.inflate(mViewResourceId, null);
ImageView iv = (ImageView)convertView.findViewById(R.id.option_icon);
iv.setImageDrawable(mIcons.getDrawable(position));
TextView tv = (TextView)convertView.findViewById(R.id.option_text);
tv.setText(mStrings[position]);
return convertView;
}
任何帮助都将不胜感激。
答案 0 :(得分:0)
在这种情况下,您使用自定义适配器,我是对的。
这样您就可以管理自定义适配器中的点击侦听器
如果您不想要这种情况,那么您必须
android:focusableInTouchMode="false"
在xml文件中的自定义列表行中,然后调用listview onclick listener它将起作用。
答案 1 :(得分:0)
如果你只有两个项目意味着你可以根据位置重定向活动,你可以这样做
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String str = parent.getItemAtPosition(position).toString();
Log.e("Clicked Value is", str);
if(str.equals("<Your Class Name>")){
startActivity(new Intent(MainActivity.this,
FirstActivity.class);
}else{
startActivity(new Intent(MainActivity.this,
Second.class);
}
}
});
答案 2 :(得分:0)
在ActivityClass
中,让listView
实施onItemClickListener
。
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String value = options[position];
if(value.equals("Bhutan")){
Intent intent = new Intent(CurrentActivity.this, BhutanInfo.class);
startActivity(intent);
}else if(value.equals("Columbia")){
intent = new Intent(CurrentActivity.this, ColumbiaInfo.class);
startActivity(intent);
}
}
});
P.S:确保BhutanInfo
和ColumbiaInfo
正在延长Activity
。
在行布局中,为listview
设置focusable
和focusableInTouchMode
false
,为其中的所有元素充气。