2016-03-22 7 views
0

In meiner Anwendung geworfen werden ich ein neues Intent nennen wollen, aber es Ausnahme zeigen:android.support.v7.internal.view.menu.ActionMenuItemView kann nicht auf android.widget.Button

java.lang .ClassCastException: android.support.v7.internal.view.menu.ActionMenuItemView kann nicht in android.widget.Button umgewandelt werden. Ich wurde im Internet gefunden, kann aber in meinem Fall nicht korrekt finden.

Mein Problem Start bei HistoryFragment.java extends Fragment Menüpunkt aufzurufen:

public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.saveContact: 
      Button button2=(Button) getActivity().findViewById(R.id.saveContact); 
      button2.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent intent = new Intent(getActivity(), AddContactActivity.class); 
        startActivity(intent); 
       } 
      }); 

und Klasse: AddContactActivity.java extends AppCompatActivity enthält den gesamten Code alle Informationen einfügen und fügen Sie per Telefon zu kontaktieren.

public class AddContactActivity extends AppCompatActivity { 
    private EditText editTextName; 
    private EditText editTextNumber; 
    private Button addContactBtn; 
    private CircleImageView contactImage; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add_contact); 

     editTextName = (EditText) findViewById(R.id.edtTxtName); 
     editTextNumber = (EditText) findViewById(R.id.edtTxtNumber); 
     addContactBtn = (Button) findViewById(R.id.addContactBtn); 
     contactImage = (CircleImageView) findViewById(R.id.contactImage); 

     final String nameStr = getIntent().getStringExtra("name"); 
     final String numberStr = getIntent().getStringExtra("number"); 
     final String idStr = getIntent().getStringExtra("id"); 

     if(nameStr != null && numberStr != null && idStr != null) { 
      editTextName.setText(nameStr); 
      editTextNumber.setText(numberStr); 
      addContactBtn.setText("UPDATE"); 

      Bitmap bitmap = getIntent().getParcelableExtra("image"); 
      if(bitmap != null) { 
       contactImage.setImageBitmap(bitmap); 
      } 
     } else { 
      addContactBtn.setText("ADD"); 
     } 

     addContactBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String name = editTextName.getText().toString().trim(); 
       String number = editTextNumber.getText().toString().trim(); 

       if(nameStr == null || numberStr == null || idStr == null) { 
        if (insertContact(name, number) && !(name.isEmpty() || number.isEmpty())) { 
         Toast.makeText(getApplicationContext(), "Đã thêm liên lạc", Toast.LENGTH_LONG).show(); 
        } else { 
         Toast.makeText(getApplicationContext(), "Lỗi không thể thêm liên lạc", Toast.LENGTH_LONG).show(); 
        } 
       } else { 
        if(updateContact(idStr, name, number)) { 
         Toast.makeText(getApplicationContext(), "Cập nhật 1 liên lạc", Toast.LENGTH_LONG).show(); 
         //snackBar(v, "Contact updated."); 
        } else { 
         Toast.makeText(getApplicationContext(), "Lỗi không thể cập nhật liên lạc", Toast.LENGTH_LONG).show(); 
        } 
       } 
       editTextName.setText(""); 
       editTextNumber.setText(""); 
      } 
     }); 
    } 

    // Insert contact 
    public boolean insertContact(String firstName, String mobileNumber) { 
     ContentResolver contentResolver = this.getContentResolver(); 
     ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

     ops.add(ContentProviderOperation 
       .newInsert(ContactsContract.RawContacts.CONTENT_URI) 
       .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
       .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
       .build()); 
     ops.add(ContentProviderOperation 
       .newInsert(ContactsContract.Data.CONTENT_URI) 
       .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
       .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
       .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, firstName).build()); 
     ops.add(ContentProviderOperation 
       .newInsert(ContactsContract.Data.CONTENT_URI) 
       .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
       .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
       .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, mobileNumber) 
       .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE).build()); 
     try { 
      contentResolver.applyBatch(ContactsContract.AUTHORITY, ops); 
     } catch (Exception e) { 
      return false; 
     } 
     return true; 
    } 


    boolean updateContact(String id, String name, String number) { 
     ArrayList<ContentProviderOperation> ops = new ArrayList<>(); 
     ops.add(ContentProviderOperation 
       .newUpdate(ContactsContract.Data.CONTENT_URI) 
       .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE 
         + "=?", new String[]{id, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}) 
       .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name) 
       .build()); 

     ops.add(ContentProviderOperation 
       .newUpdate(ContactsContract.Data.CONTENT_URI) 
       .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE 
           + "=? AND " + ContactsContract.CommonDataKinds.Organization.TYPE + "=?" 
         , new String[]{id, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE 
           , String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)}) 
       .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number) 
       .build()); 
     try { 
      getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
     } catch(Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     switch(id) { 
      case android.R.id.home: 
       onBackPressed(); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

Antwort

0

In Ihrem onActionItemClicked() Sie nicht R.id.saveContact-Button typisieren soll. Sie können es direkt als View Typ verwenden.

View button2= getActivity().findViewById(R.id.saveContact); 
      button2.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent intent = new Intent(getActivity(), AddContactActivity.class); 
        startActivity(intent); 
       } 
      }); 
+0

Dies ist ein anderer Fehler. Haben Sie "AddContactActivity" in Ihrer Manifestdatei deklariert? –

+0

Ja, ich habe 'AddContacActivity' deklariert, aber es wird ein Fehler angezeigt, wenn ich auf die Schaltfläche klicke: ' Aktivität kann nicht gestartet werden ComponentInfo {kr.co.composer.callrecord/kr.co.composer.callrecord.page.AddContactActivity}: android.view. InflateException: Binäre XML-Dateizeile 13: Fehler beim Aufblasen der Klasse active.since93.contentproviderdemo.imageview.CircleImageView'. Meine Klasse 'CircleImageView' ist: http://pastebin.com/qyd6ERHR –

+0

Es gibt einen Fehler in Ihrem" AddContactActivity "-Layout-XML. Repariere das. –

Verwandte Themen