2012-03-31 86 views
0

onItemClickListener不適用於customListadapter ..有人可以幫助我。這裏是完整的代碼。我已經爲listview的itemclick監聽器設置了。但它不起作用。onItemClickListener不適用於customListadapter

輸入代碼here`BuddiesActivity.class

public class BuddiesActivity extends Activity { 
    /** 
    * list view 
    */ 
    ListView listViewFriendsDetails; 
    /** 
    * adapter for list out the friendsDetails 
    */ 
    ListViewCustomeAdapter detailsAdapter; 

    @Override 
    public boolean onCreatePanelMenu(int featureId, Menu menu) { 
     MenuInflater inflaterObject = getMenuInflater(); 
     inflaterObject.inflate(R.menu.buddiesmenu, menu); 
     /* 
     * to change the colour of menu background 
     */ 
     getLayoutInflater().setFactory(new Factory() { 
      @Override 
      public View onCreateView(String name, Context context, 
        AttributeSet attrs) { 
       if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) { 
        try { 
         LayoutInflater f = getLayoutInflater(); 
         final View view = f.createView(name, null, attrs); 
         new Handler().post(new Runnable() { 
          public void run() { 
           // set the background drawable 
           view.setBackgroundColor(Color.GRAY); 

           // set the text color 
           ((TextView) view).setTextColor(Color.DKGRAY); 

          } 
         }); 
         return view; 
        } catch (InflateException e) { 
        } catch (ClassNotFoundException e) { 
        } finally { 
         Log.i(Constants.DETAILS_WORKSHEET_ACTIVITY, 
           "menu colour changed"); 
        } 
       } 
       return null; 
      } 
     }); 
     return super.onCreatePanelMenu(featureId, menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle item selection 
     switch (item.getItemId()) { 
     case R.id.birthday: 

      detailsAdapter = new ListViewCustomeAdapter(this, 
        DatabaseOperation.friendsBirthdayDetailsArrayListObject 
          .size(), 
        DatabaseOperation.friendsBirthdayDetailsArrayListObject, 
        true); 

      listViewFriendsDetails.setAdapter(detailsAdapter); 
      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

    // Intent detailsIntent = new Intent(BuddiesActivity.this, 
    // DetailsActivity.class); 
    // detailsIntent 
    // .setAction(DatabaseOperation.friendsDetailsArrayListObject 
    // .get(position).getEmailId()); 
    // startActivity(detailsIntent); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listview); 
     /* 
     * Listing the songs and its details 
     */ 
     listViewFriendsDetails = (ListView) findViewById(R.id.listView); 

     detailsAdapter = new ListViewCustomeAdapter(this, 
       DatabaseOperation.friendsDetailsArrayListObject.size(), 
       DatabaseOperation.friendsDetailsArrayListObject, false); 
     listViewFriendsDetails.setAdapter(detailsAdapter); 
     registerForContextMenu(listViewFriendsDetails); 

     listViewFriendsDetails 
       .setOnItemClickListener(new OnItemClickListener() { 

        @Override 
        public void onItemClick(AdapterView<?> arg0, View arg1, 
          int arg2, long arg3) { 
         System.out 
           .println("buttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt"); 
        } 
       }); 

    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.add(0, 0, 0, "call"); 
     menu.add(0, 0, 0, "Message"); 
     menu.add(0, 0, 0, "Find him/her"); 
     menu.add(0, 0, 0, "Find his/her home"); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterView.AdapterContextMenuInfo info; 
     try { 
      info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 

     } catch (ClassCastException e) { 
      Log.e("", "bad menuInfo", e); 
      return false; 
     } 

     Toast.makeText(
       this, 
       "id = " 
         + DatabaseOperation.friendsDetailsArrayListObject.get(
           info.position).getFirstName(), 
       Toast.LENGTH_SHORT).show(); 
     return true; 
    } 
} 


This my adapter to list the items 
ListViewCustomAdapter.class 


public class ListViewCustomeAdapter extends BaseAdapter implements 
     View.OnCreateContextMenuListener { 
    /** 
    * normal selection or birthday selection 
    */ 
    Boolean IS_BIRTHDAY; 
    /** 
    * Information of the friendsdetails from the database 
    */ 
    ArrayList<FriendsDetails> friendsDetailsInList = new ArrayList<FriendsDetails>(); 
    public Context context; 
    public Context con; 
    public LayoutInflater inflater; 

    public ListViewCustomeAdapter(Context context, int count, 
      ArrayList<FriendsDetails> friendsDetailsArryListObject, 
      Boolean IS_BIRTHDAY) { 
     super(); 
     this.context = context; 
     this.IS_BIRTHDAY = IS_BIRTHDAY; 
     friendsDetailsInList = friendsDetailsArryListObject; 
     this.inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    @Override 
    public int getCount() { 
     return friendsDetailsInList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    /** 
    * 
    * 
    * @author Anitha 
    * 
    */ 
    public static class ViewHolder { 

     /** 
     * Email Id 
     */ 
     TextView emaiIdView; 
     /** 
     * First name 
     */ 
     TextView txtViewTitle; 
     /** 
     * Status 
     */ 
     TextView statusTextView; 
     /** 
     * The phone icon 
     */ 
     ImageView phoneIcon; 
     /** 
     * The home icon 
     */ 
     ImageView homeIcon; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     FriendsDetails particularFriendsInfo = friendsDetailsInList 
       .get(position); 

     if (convertView == null) { 

      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.listitemrow, null); 
      holder.txtViewTitle = (TextView) convertView 
        .findViewById(R.id.txtViewTitle); 
      holder.statusTextView = (TextView) convertView 
        .findViewById(R.id.status); 
      holder.emaiIdView = (TextView) convertView 
        .findViewById(R.id.emailId); 
      holder.phoneIcon = (ImageView) convertView 
        .findViewById(R.id.mobileAvailable); 
      holder.homeIcon = (ImageView) convertView 
        .findViewById(R.id.addressAvailable); 
      convertView.setTag(holder); 

     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     /* 
     * If the person has no mobile number and address 
     */ 
     if (particularFriendsInfo.getAddress() == null) { 
      holder.homeIcon.setImageResource(R.drawable.mobileiconrestricted); 
     } 
     if (particularFriendsInfo.getMobileNumber() == null) { 
      holder.phoneIcon.setImageResource(R.drawable.homerestricted); 
     } 
     holder.txtViewTitle.setText(particularFriendsInfo.getFirstName()); 
     holder.emaiIdView.setText(particularFriendsInfo.getEmailId()); 
     if (!IS_BIRTHDAY) 
      holder.statusTextView.setText(particularFriendsInfo.getStatus()); 
     else 
      holder.statusTextView.setText(particularFriendsInfo.getBirthday()); 
     convertView.setOnCreateContextMenuListener(this); 
     // } 
     return convertView; 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     // TODO Auto-generated method stub 

    } 
} 

This is my xml where it it contains the view of each row in listview. 
listitemrow.xml 


<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@layout/itemselector" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:padding="5dip"> 

    <ImageView 
    android:focusable="false" 
     android:layout_width="50dip" 
     android:layout_height="50dip" 
     android:id="@+id/imgViewLogo" 
     android:src="@drawable/icon" 
     android:layout_alignParentLeft="true" 
     android:layout_centerInParent="true" 
     android:scaleType="center"> 
    </ImageView> 

    <TextView 
    android:focusable="false" 
     android:layout_height="wrap_content" 
     android:text="TextView" 
     android:textStyle="bold" 
     android:textColor="#000000" 
     android:layout_width="wrap_content" 
     android:id="@+id/txtViewTitle" 
     android:layout_toRightOf="@+id/imgViewLogo" 
     android:layout_marginLeft="2dip"> 
    </TextView> 
    <ImageView 
    android:focusable="false" 
    android:src="@drawable/mobileicon" 
    android:layout_toRightOf="@id/txtViewTitle" 
    android:layout_marginLeft="50dip" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/mobileAvailable" 
    /> 
    <ImageView 
    android:focusable="false" 
    android:src="@drawable/home" 
    android:layout_toRightOf="@id/mobileAvailable" 
    android:layout_marginLeft="2dip" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/addressAvailable" 
    /> 
    <TextView 
    android:focusable="false" 
     android:layout_height="wrap_content" 
     android:text="TextView" 
     android:textStyle="bold" 
     android:textColor="#606060" 
     android:layout_width="wrap_content" 
     android:id="@+id/emailId" 
     android:layout_toRightOf="@id/imgViewLogo" 
     android:layout_below="@id/txtViewTitle" 
     android:layout_marginRight="10dip" 
     android:layout_marginLeft="2dip"> 
    </TextView> 
    <TextView 
    android:focusable="false" 
    android:layout_toRightOf="@id/emailId" 
    android:layout_below="@id/txtViewTitle" 
    android:layout_width="wrap_content" 
    android:id="@+id/status" 
    android:layout_height="wrap_content" 
    android:textStyle="bold" 
    android:layout_marginLeft="10dip" 
     android:textColor="#606060" 

    /> 

</RelativeLayout> 


listview.xml 


<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent" 
     android:listSelector="@layout/itemselector" 
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

     <ListView 

     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:id="@+id/listView" 

     android:layout_alignParentLeft="true"> 
    </ListView> 
    </RelativeLayout> 
+0

istViewFriendsDetails.setOnItemClickListener(this).. implement listener添加未實現的方法並嘗試 – Abhi 2012-03-31 13:47:23

回答

0

嘗試SETFOCUS假編程到您的ImageView,TextView的,等等......像

   Button demo=(Button)row.findViewById(R.id.demo); 
       demo.setFocusable(false); 

這是buttonview設置它的ImageView和其他

+1

我試過了。但那也不起作用。 – Anitha 2012-03-31 13:41:04

+0

除了listview的OnItemClickListener其他功能正在工作吧? – 2012-03-31 13:53:49

+0

是的,一切工作正常。比列表視圖 – Anitha 2012-03-31 15:12:22

0

以下是我在類似情況下必須做的事情。像你一樣,我嘗試了只是android:focusable="false"它仍然沒有工作。

所以,我做了什麼xml中,在排佈置每個imageview的並且TextView的:

 android:focusable="false" 
     android:focusableInTouchMode="false" 

這保證了無論是鍵盤或觸摸屏可能會導致焦點轉到一個項目行中而不是行,並且應該使偵聽器能夠正常工作。

+0

在那個Customadapter中,我給了oncreateContextmenu。如果我在getview中刪除了oncreatecontextmenu,則單個onclick正在工作。因此,在自定義適配器中爲onclick listener.Problem設置的getview方法的內部解決方案:) – Anitha 2012-03-31 15:45:19

相關問題