각 행에 텍스트와 버튼이있는 목록보기가 있는데 목록보기 setOnItemClickListener ()가 작동하지 않습니다. 항목 클릭과 버튼 클릭 이벤트를 다르게 처리 할 수 있습니까 (항목 클릭은 ActivityA를 호출해야하고 버튼 클릭은 ActivityB를 호출해야 함). 누구든지 해결책이 있습니까
    private ArrayList<String> userIDArr = null;
    private ArrayList<String> userNameArr = null;
    private DatabaseHelper dbHelper = null;
    private ListView userListView=null;
    public void onCreate(Bundle savedInstanceState)
        {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.list_view);
          dbHelper = new DatabaseHelper(this.getApplicationContext());
          Map<String,ArrayList<String>> displayMap = dbHelper.getUserListToDisplay();
          userIDArr = displayMap.get("UserID");
          userNameArr = displayMap.get("FirstName1");
          userListView = (ListView) findViewById(R.id.listView2);
          userListView.setAdapter(new UserListAdapter(this,userIDArr));
          userListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                  Toast.makeText(usersListActivity.this,
                            "Item in position " + position + " clicked", Toast.LENGTH_LONG).show();
              }
            });
     }
    public class UserListAdapter extends ArrayAdapter<String>
    {
        Activity context;
        public UserListAdapter(Activity context, ArrayList<String> names) {
            super(context, R.layout.list_item, names);
            this.context = context;
        }
        private class ViewHolder {
            public TextView UserNameAndID;
            public TextView Description;
            public Button  UploadBtn;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            View rowView = convertView;
            if (rowView == null) {
                LayoutInflater inflater = context.getLayoutInflater();
                rowView = inflater.inflate(R.layout.list_item, null, true);
                holder = new ViewHolder();
                holder.UserNameAndID = (TextView) rowView.findViewById(R.id.User_detailsTxt);
                holder.Description = (TextView) rowView.findViewById(R.id.User_status);
                holder.UploadBtn = (Button) rowView.findViewById(R.id.uploadbutton);
                holder.UploadBtn.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                        Toast.makeText(usersListActivity.this," Button clicked",Toast.LENGTH_SHORT).show();
                        }
                    });
                    rowView.setTag(holder);
            } else {
                holder = (ViewHolder) rowView.getTag();
            }
            String s = userNameArr.get(position)+","+userIDArr.get(position);
            holder.UserNameAndID.setText(s);
            holder.Description.setText("U r in middle");
            return rowView;
        }
    }
}`
답변
다음과 같이 버튼 (또는 목록 항목 내부 클릭을 처리하려는 다른보기)을 설정해보십시오.
android:focusable="false"
android:focusableInTouchMode="false"
답변
때때로 목록은 여전히 클릭 리스너가 통과하도록 만들 수 없습니다. 이 경우 속성을 하나 더 추가해야 할 수 있습니다.
android:descendantFocusability="blocksDescendants"
그리고이 속성은 ListView 요소를 제공 한 XML의 최상위 레이아웃에 추가되어야합니다.
답변
목록보기에 활성보기 / 포커스 가능보기가있는 경우 비활성화 됩니다. 일반적으로 onItemClickListener초점을 맞출 android:focusable="false"수있는보기에 다음 을 추가하여 초점을 맞출 수 없게 만들 수 있습니다
 .
답변
타자 물 Listener은 전체 rowView와 Button내부 에 모두 추가하는 것입니다 Adapter. 이 같은.
public class MyAdapter extends BaseAdapter implements View.OnClickListener{
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
            View rowView = convertView;
            if(rowView == null)
            {
                    //intialize rowView, and set onclick listener only once.
                    rowView = someIntilizationMehhodOrInflatorMethod();
                    //add listener to the button also and also to the row view
                    rowView.setOnClickListener(this);
            }
            //all your inflation and setting values goes here and at the end,
            //set position as tag to get the correct position, rather buggy one.
            rowView.setTag(String.valueOf(position));
            return rowView;
    }
    public void onClick(View v)
    {
            //now get the tag of View v and convert it to integer.
            int pos = Integer.parseInt(v.getTag().toString());
            Toast.makeText(context,"Item in position " + pos + " clicked",Toast.LENGTH_LONG).show();
    }
}
답변
설정보십시오 setClickable(false)각 Button, ImageButton등과 View같이 :
view.setClickable(false);
button.setClickable(false);
imagebutton.setClickable(false);
또한 추가해야
android:descendantFocusability="blocksDescendants"
메인 (첫 번째 레벨) 레이아웃으로
답변
버튼을 추가하는 대신 잘 작동 ImageView하는 setOnItemClcik리스너를 제공하십시오 .
public View getView(final int position, View convertView, ViewGroup parent) {
     MyViewHolder mViewHolder;
     if(convertView == null) {
         convertView = inflater.inflate(R.layout.youtubesearchrow, null);
         mViewHolder = new MyViewHolder();
         mViewHolder.alarm = (ImageView)convertView.findViewById(R.id.alarm);
         convertView.setTag(mViewHolder);
     } else {
         mViewHolder = (MyViewHolder) convertView.getTag();
     }
     mViewHolder.tvTitle = detail(convertView, R.id.tvTitle,
     // mViewHolder.tvDesc  = detail(convertView, R.id.tvDesc,  
     mViewHolder.ivIcon  = detail_image(convertView, R.id.ivIcon,
     mViewHolder.alarm.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        // TODO Auto-generated method stub
        }
    });
        return convertView;
}
답변
나는 또한 같은 오류가 발생합니다. 목록에서 레이아웃 경우에 당신은 그것을 대체 할 수있는 버튼이 TextView예 ImageButton와를 ImageView. 참고로 내 코드는 다음과 같습니다.
private Activity activity;
private LayoutInflater inflater;
private List<ItemList> itemListsItems;
private Bookmark_SharedPref pref;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public CustomListAdapter_Item(Activity activity,List<ItemList> itemListsItems){
    this.activity=activity;
    this.itemListsItems=itemListsItems;
    pref = new Bookmark_SharedPref(activity);
}
@Override
public int getCount() {
    return itemListsItems.size();
}
@Override
public Object getItem(int position) {
    return itemListsItems.get(position);
}
@Override
public long getItemId(int position) {
    return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View v = convertView;
    ViewHolder holder;
    if(inflater == null){
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    if(convertView == null){
        convertView = inflater.inflate(R.layout.item_layout,null);
        holder = new ViewHolder();
        convertView.setTag(holder);
    }
    else{
        holder = (ViewHolder)convertView.getTag();
    }
    if(imageLoader == null){
        imageLoader = AppController.getInstance().getImageLoader();
    }
     holder.img = (NetworkImageView)convertView.findViewById(R.id.item_image);
    holder.Title = (TextView)convertView.findViewById(R.id.item_title);
    holder.Cat = (TextView)convertView.findViewById(R.id.item_category);
    holder.id = (TextView)convertView.findViewById(R.id.itemid);
    holder.Desc = (TextView)convertView.findViewById(R.id.item_description);
    holder.book = (ImageView)convertView.findViewById(R.id.bookmark_star);
    // getting blog data or the row
    ItemList il = itemListsItems.get(position);
    //setting image
    holder.img.setImageUrl(il.getImageUrl(), imageLoader);
    // setting title
    holder.Title.setText(il.getTitle());
    //setting category
    holder.Cat.setText(il.getCategory());
    //setting blog id
    holder.id.setText(il.getId());
    //setting description
    holder.Desc.setText(il.getDescription());
    //bookmarking the post
    holder.book.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            itemListsItems.get(position).isFav = !itemListsItems.get(position).isFav;
            ((ImageView)v.findViewById(R.id.bookmark_star)).setImageResource(itemListsItems.get(position).isFav ? R.mipmap.active_star : R.mipmap.inactive_star);
            if(itemListsItems.get(position).isFav){
                String data = Integer.toString(itemListsItems.get(position).id);
                Toast.makeText(v.getContext(),"fav hai "+data,Toast.LENGTH_SHORT).show();
                pref.addPref(data);
            } else {
                String data = Integer.toString(itemListsItems.get(position).id);
                Toast.makeText(v.getContext(),"not fav"+ data,Toast.LENGTH_SHORT).show();
                pref.removePref(data);
            }
            //notifyDataSetChanged();
        }
    });
    ((ImageView)convertView.findViewById(R.id.bookmark_star)).setImageResource(itemListsItems.get(position).isFav ? R.mipmap.active_star : R.mipmap.inactive_star);
    /*
    if(itemListsItems.get(position).isFav){
        String data = Integer.toString(itemListsItems.get(position).id);
        Toast.makeText(convertView.getContext(),"fav hai "+data,Toast.LENGTH_SHORT).show();
        pref.addPref(data);
    } else {
        String data = Integer.toString(itemListsItems.get(position).id);
        //Toast.makeText(convertView.getContext(),"not fav"+ data,Toast.LENGTH_SHORT).show();
        pref.removePref(data);
    }
    */
    return convertView;
}
private static class ViewHolder {
   public TextView Title, Desc,Cat,id;
    ImageView book;
    NetworkImageView img;
}
또한 android:focussable="true"해당 버튼 / 텍스트 매개 변수를 사용 하여 목록 레이아웃을 만들어야합니다 android:focussable="false".
