2014-03-19 23 views
0

我已经通过使用putInt()将ResourceId作为从我的CreateActivity到我的MainActivity的整数传递给它。我希望能够将drawable从一个活动传递给另一个活动。作为活动之间的整数传递ResourceId

我应该怎么做才能引用ResourceId以获取与其关联的drawable?或者我应该看看将图像转换为位图,并以这种方式传递图像?

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} 

MAINACTIVITY

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

} 

}

CREATEACTIVITY

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

}

+0

传递整个位图可能负载过重;我会考虑传递一个字符串路径到图像的位置;或Parcelable。 – Eenvincible

回答

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

这是不对的。

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

而且resourceID只是一个int,所以只需将int从一个活动传递给另一个活动。

+0

我有一个按钮,在另一个活动中有一个与其关联的绘图。我如何访问在另一个活动中设置为该按钮的绘图? –

+0

您无法直接访问它。如上所述,您可以将它传递给新的活动...使用意图来执行此操作。 – ElDuderino