java - 在 Activity 之间传递 ResourceId 作为整数

标签 java android android-intent bitmap android-drawable

我使用 putInt() 将 ResourceId 作为整数从 CreateActivity 传递到 MainActivity;我希望能够将可绘制对象从一个 Activity 传递到另一个 Activity 。

我应该如何引用该 ResourceId 来获取与其关联的可绘制对象?或者我应该考虑将图像转换为位图,并以这种方式传递它?

LOGCAT

03-19 11:59:41.353: E/AndroidRuntime(5566): FATAL EXCEPTION: main
03-19 11:59:41.353: E/AndroidRuntime(5566): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=Intent { cmp=com.example.datetracker/.MainActivity (has extras) }} to activity {com.example.datetracker/com.example.datetracker.MainActivity}: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x12/d=0x0 a=3 r=0x7f090006}

主要 Activity

public class MainActivity extends FragmentActivity implements OnClickListener {

ListView listView;
int lastIndex = -1;
ArrayList<Event> lstEvents = new ArrayList<Event>();

// detail view
TextView tvTitle, tvTime, tvDate;
ImageView ivPic;
View vw_master;

boolean _isBack = true;

ImageButton add;

String title;
String date;
String time;
int resId;

static final int PICK_CONTACT_REQUEST = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    // // get detail controls
    tvTitle = (TextView) findViewById(R.id.textViewTitle);
    tvDate = (TextView) findViewById(R.id.textViewDate);
    tvTime = (TextView) findViewById(R.id.textViewTime);
    ivPic = (ImageView) findViewById(R.id.imageView1);

    add = (ImageButton) findViewById(R.id.add);
    add.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.add:
        Intent intent = new Intent(this, CreateActivity.class);
        startActivityForResult(intent, 100);
        break;
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Create the adapter to convert the array to views
    EventAdapter adapter = new EventAdapter(this, lstEvents);

    // attach adapter to a list view
    listView = (ListView) findViewById(R.id.listViewFragment);
    listView.setAdapter(adapter);

    if (requestCode == 100) {
        if (resultCode == RESULT_OK) {
            Bundle b = data.getExtras();
            title = b.getString("TITLE");
            time = b.getString("TIME");
            date = b.getString("DATE");

            // retrieving resId, creating drawable

        //  resId = b.getInt("DRAWABLE");
            //Log.e("RESIDRESIED", "DRAWABLE " + resId);
            Drawable img = getResources().getDrawable(R.id.btn_picture);

            /////

            Log.e("TITLE", title);
            Log.e("TIME", time);
            Log.e("DATE", date);

            Event newEvent = new Event();
            newEvent.set_date(date);
            newEvent.set_title(title);
            newEvent.set_time(time);

            // set drawable
            newEvent.set_drawable(img);

            lstEvents.add(newEvent);

            adapter.addAll(lstEvents);
            adapter.notifyDataSetChanged();
        }
    }

}

}

创建 Activity

public class CreateActivity extends Activity implements OnClickListener {

EditText etTitle;
Button btDate;
Button btTime;
Button btPic;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_create);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    //onclicklistener
    findViewById(R.id.btn_confirm).setOnClickListener(this);
    findViewById(R.id.btn_back).setOnClickListener(this);

    etTitle = (EditText) findViewById(R.id.editTextTitle);
    btDate = (Button) findViewById(R.id.btn_date);
    btTime = (Button) findViewById(R.id.btn_time);
    btPic = (Button) findViewById(R.id.btn_picture);

}

// Will be called via the onClick attribute
// of the buttons in main.xml
public void onClick(View view) {
    switch (view.getId()) {
    case R.id.btn_confirm:
        String title = etTitle.getText().toString();
        String time = btTime.getText().toString();
        String date = btDate.getText().toString();

        //int resId = getResources().getInteger(R.id.btn_picture);
        int resId = R.id.btn_picture;

        Log.e("LOG", title);
        Log.e("LOG", time);
        Log.e("LOG", date);

        Bundle newBundle = new Bundle();
        newBundle.putString("TITLE", title);
        newBundle.putString("TIME", time);
        newBundle.putString("DATE", date);

        //Trying to pass a drawable from one activity to another
        newBundle.putInt("DRAWABLE", resId);

        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtras(newBundle);

        setResult(RESULT_OK, intent);

        finish();

        break;

    case R.id.btn_back:
        finish();
        break;
    }

}

public void showTimePickerDialog(View v) {
    DialogFragment newFragment = new TimePickerFragment();
    newFragment.show(getFragmentManager(), "timePicker");
}

public void showDatePickerDialog(View v) {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getFragmentManager(), "datePicker");
}

public void showPicturePickerDialog(View v) {
    DialogFragment newFragment = new PicturePickerFragment();
    newFragment.show(getFragmentManager(), "picturePicker");
}

}

最佳答案

Drawable img = getResources().getDrawable(R.id.btn_picture); 

这是错误的。

Drawables 通过 R.drawable.xyz 访问,R.id.xyz 用于布局 ID。

资源 ID 只是一个 int,因此只需将 int 从一个 Activity 传递到另一个 Activity 即可。

关于java - 在 Activity 之间传递 ResourceId 作为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22511563/

相关文章:

Java - 是否有 "convertible"接口(interface)?

java - Vector3 赋值似乎被忽略

android - 定期更新后台数据(Android)

java - 默认开启前置摄像头

android - 如何默认在 ActionOpenDocument Intent 中显示 "internal storage"选项

java - 如何从 Python 2.7 调用 C++ 和/或 Java 函数?

java - 模拟 ReactiveSecurityContextHolder

java - 如何在android中使用HTTP post方法解析JSON数据?

java - 如何禁用声音

android - 仅使用 Maven 使用 Kotlin 的 Android 资源扩展