我知道这是一个老问题,我知道它有一些答案,但没有答案对我不起作用。我在我的主适配器(扩展arrayAdapter)中使用了imageAdapter(扩展baseAdapter)我的工作结果是:
在添加图像适配器之前,每件事都很好。但是setOnItemClickListener现在不起作用。我认为我的问题与自动关注图库视图有关,因为当我删除它时,setonitemselectedlistener正常工作。我在XML或程序上尝试了一些答案,如set focusable =“false”或focusableInTouchMode =“false”。我的每行XML文件是(不完整):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="130dp"
android:paddingBottom="10dp">
//...
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Account name : "
android:id="@+id/textView87"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:focusable="false"/>
<Gallery
android:layout_width="200dp"
android:layout_height="50dp"
android:id="@+id/gallery5"
android:layout_toRightOf="@+id/textView88"
android:layout_alignBottom="@+id/textView88"
android:focusable="false"
android:focusableInTouchMode="false"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Persons : "
android:id="@+id/textView88"
android:layout_below="@+id/textView7"
android:layout_alignLeft="@+id/textView7"
android:layout_alignStart="@+id/textView7"
android:layout_marginTop="20dp"
android:focusable="false"/>
</RelativeLayout>
我的微调器设置事件是:
spn.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
reseter();
acn = ((TextView) view.findViewById(R.id.textView6)).getText().toString();
persons = ((TextView) view.findViewById(R.id.textView10)).getText().toString();
Toast.makeText(getBaseContext(), "acc name selected: " + acn, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
谢谢你的回答,对不好的英语抱歉。
编辑:我的图片适配器是:
public class ImageAdap extends BaseAdapter {
String[] imageIDs;
private Context context;
private Activity activity;
private int itemBackground;
public ImageAdap(Context c,Activity ac,String[] imgstring)
{
activity=ac;
context = c;
imageIDs=imgstring;
TypedArray a = ac.obtainStyledAttributes(R.styleable.MyGallery);
a.recycle();
}
public int getCount() {
return imageIDs.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(context);
//set different image from different location
if (imageIDs[position] != null) {
if(imageIDs[position].contains("pic") ){
String st="R.drawable." + imageIDs[position];
int resID = activity.getResources().getIdentifier(imageIDs[position], "drawable", activity.getPackageName());
imageView.setImageResource(resID);
}
if( imageIDs[position].contains("contactic")){
imageView.setImageResource(R.drawable.contactic);
}
if(imageIDs[position].contains("piture")) {
File imgFile = new File(Environment.getExternalStorageDirectory().getPath() + "/Dongopick/" + imageIDs[position]);
if (imgFile.exists()) {
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
imageView.setImageBitmap(myBitmap);
}
}
if(imageIDs[position].contains("content")){
imageView.setImageURI(Uri.parse(imageIDs[position]));
}
}
//set parameter of gallery
imageView.setLayoutParams(new Gallery.LayoutParams(70, 70));
imageView.setBackgroundResource(itemBackground);
imageView.setPadding(10, 0, 10, 0);
return imageView;
}
}
我的主适配器是:
public class Accountadapter extends ArrayAdapter<String> {
private final Activity activity;
private final String[] acname;
private final String[] acpic;
private final String[] acid;
private final String[] acpersons;
private final String[] acstatus;
public Accountadapter(Activity activity, String[] mname, String[] mpic, String[] mid, String[] mpersons, String[] mstatus) {
super(activity, R.layout.accountrow, mid);
// TODO Auto-generated constructor stub
this.activity = activity;
this.acname = mname;
this.acpic = mpic;
this.acid = mid;
this.acpersons = mpersons;
this.acstatus=mstatus;
}
@Override
public View getDropDownView(int position, View convertView,ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
public View getCustomView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = activity.getLayoutInflater();
View rowView = inflater.inflate(R.layout.accountrow, parent, false);
TextView txtname = (TextView) rowView.findViewById(R.id.textView6);
TextView txtpicname = (TextView) rowView.findViewById(R.id.textView9);
TextView txtid = (TextView) rowView.findViewById(R.id.textView8);
TextView txtpersons = (TextView) rowView.findViewById(R.id.textView10);
ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView5);
ImageView ivs = (ImageView) rowView.findViewById(R.id.imageView9);
final Gallery gallery = (Gallery)rowView.findViewById(R.id.gallery5);
gallery.setEnabled(false);
gallery.setFocusable(false);
gallery.setClickable(false);
gallery.setFocusableInTouchMode(false);
gallery.setSelected(false);
// gallery.setTouchscreenBlocksFocus(false);
Hesabketab hesab=new Hesabketab();
String[] personid= new String[ hesab.persondivider(acpersons[position]).length];
personid=hesab.persondivider(acpersons[position]);
DBadapter mdb=new DBadapter(getContext());
mdb.open();
ArrayList<String> ar1=new ArrayList<String>();
for(int i=0;i<personid.length;i++){
ar1.add( mdb.fetchDbById(Integer.parseInt(personid[i])).getPicname());
}
String[] personpic=(String[]) ar1.toArray(new String[ar1.size()]);
gallery.setAdapter(new ImageAdap(getContext(), activity, personpic));
mdb.close();
gallery.setEnabled(false);
gallery.setFocusable(false);
gallery.setClickable(false);
gallery.setFocusableInTouchMode(false);
gallery.setSelected(false);
// gallery.setTouchscreenBlocksFocus(false);
imageView.setImageResource(R.drawable.contactic);
if (acname[position] != null) {
txtname.setText(acname[position]);
}
if (acpersons[position] != null) {
txtpersons.setText(acpersons[position]);
}
if (acid[position] != null) {
txtid.setText(acid[position]);
}
if (acpic[position] != null) {
txtpicname.setText(acpic[position]);
}
if (acstatus[position] .equals("open")) {
ivs.setImageResource(R.drawable.green);
}else{
ivs.setImageResource(R.drawable.red);
}
if (acpic[position] != null) {
//here is for string parser
if(acpic[position].indexOf("pic")>=0 ){
String st="R.drawable." + acpic[position];
int resID = activity.getResources().getIdentifier(acpic[position],"drawable", activity.getPackageName());
imageView.setImageResource(resID);
}
if( acpic[position].indexOf("contactic")>=0){
imageView.setImageResource(R.drawable.contactic);
}
if(acpic[position].indexOf("piture")>=0) {
File imgFile = new File(Environment.getExternalStorageDirectory().getPath() + "/Dongopick/" + acpic[position]);
if (imgFile.exists()) {
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
imageView.setImageBitmap(myBitmap);
}
}
if(acpic[position].indexOf("content")>=0){
imageView.setImageURI(Uri.parse(acpic[position]));
}
}
return rowView;
}
}