2012-03-31 4 views
0

onItemClickListener funktioniert nicht für den customListadapter .. einige ein pls helfen mir.Hier ist der volle code.Ich habe auf Itemclick Listener für die Listview gesetzt. Aber es funktioniert nicht.onItemClickListener funktioniert nicht für den customListadapter

Code eingeben 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 (dies) .. implementieren Listener hinzufügen nicht implementiertem Methos und versuchen – Abhi

Antwort

0

Try SetFocus auf false programmatisch zu Ihrem Imageview, Textview, etc ... wie

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

dies für buttonview ist es für Imageview gesetzt und andere

+1

Ich habe das versucht. Aber das funktioniert auch nicht. – Anitha

+0

Außer Listview OnItemClickListener andere Funktionen funktionieren, nicht wahr? –

+0

Ja, alles funktioniert gut. Anders als dieser einzelne Klick von Listenansicht – Anitha

0

Hier ist, was ich in einer ähnlichen Situation tun musste. Wie du, habe ich versucht mit nurandroid:focusable="false" und es hat immer noch nicht funktioniert.

Also, was habe ich im xml, für jede Imageview und Textview in der Reihe Layout:

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

Dies stellt sicher, dass weder die Tastatur oder Touchscreen den Fokus auf ein Element in der Zeile gelangen verursachen kann anstatt der Zeile, und sollte den Zuhörer ermöglichen, richtig zu arbeiten.

+0

In diesem Customadapter habe ich das oncreateContextmenu angegeben. Wenn ich das oncreatecontextmenu in der getview lösche, funktioniert onclick only.So Innerhalb dieser getview-Methode, die dort im benutzerdefinierten adapter set für onclick listener.Problem ist gelöst :) – Anitha