![](/img/trans.png)
[英]Error inflating class android.support.v7.internal.view.menu.ActionMenuItemView with Android 4 using AppCompact
[英]android.support.v7.internal.view.menu.ActionMenuItemView cannot be cast to android.widget.Button
在我的應用程序中,我想調用一個新的Intent
,但是它顯示異常:
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
包含插入所有信息並添加到手機中的所有聯系人的所有代碼。
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);
}
}
在您的onActionItemClicked()
不應將R.id.saveContact
轉換為Button
。 您可以將其視為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);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.