2016-03-22 16 views
0

にキャストすることはできません、私は新しいIntentを呼びたいが、それは例外を示しています。android.support.v7.internal.view.menu.ActionMenuItemViewは自分のアプリケーションではandroid.widget.Button

れるjava.lang .ClassCastException:android.support.v7.internal.view.menu.ActionMenuItemViewをandroid.widget.Buttonにキャストすることはできません 私はインターネットで見つかったが、私の場合は正しいとは限りません。

HistoryFragment.java extends Fragmentでの私の問題のスタートメニュー項目を呼び出す:

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); 
       } 
      }); 

とクラスを:AddContactActivity.java extends AppCompatActivityは、すべての情報を挿入し、自分の携帯電話に連絡することを追加するために、すべてのコードが含まれています。あなたのonActionItemClicked()

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); 
    } 
} 

答えて

0

あなたはButtonR.id.saveContact型キャストべきではありません。 Viewタイプと考えれば、そのまま使用することができます。

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

これは異なるエラーです。マニフェストファイルに「AddContactActivity」を宣言しましたか? –

+0

はい、私は 'AddContacActivity'を宣言しましたが、ボタンをクリックするとエラーが表示されます: 'アクティビティを開始できませんComponentInfo {kr.co.composer.callrecord/kr.co.composer.callrecord.page.AddContactActivity}:android.view。 InflateException:バイナリXMLファイル行#13:inflating class active.since93.contentproviderdemo.imageview.CircleImageView'です。私のクラス 'CircleImageView'は:http://pastebin.com/qyd6ERHR –

+0

あなたの" AddContactActivity "レイアウトxmlには何らかのエラーがあります。それを修正してください。 –

関連する問題