Загрузите ResourceDictionary из блока

Ваш пользовательский класс должен реализовывать интерфейс Parcelable. Типичная реализация Parcelable:

 public class MyParcelable implements Parcelable {
    private int mData;

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(mData);
    }

    public static final Parcelable.Creator<MyParcelable> CREATOR
            = new Parcelable.Creator<MyParcelable>() {
        public MyParcelable createFromParcel(Parcel in) {
            return new MyParcelable(in);
        }

        public MyParcelable[] newArray(int size) {
            return new MyParcelable[size];
        }
    };

    private MyParcelable(Parcel in) {
        mData = in.readInt();
    }
}

И затем вы можете отправить свои данные, используя что-то вроде этого:

Intent intent;
intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putParcelableArrayListExtra("Workout", workout);
startActivity(intent);

И получить:

workout = getIntent().getParcelableArrayListExtra("Workout");

Примечание : Убедитесь, что каждый вложенный класс вашего основного пользовательского класса имеет реализованный интерфейс Serializable

16
задан Christian Hubmann 2 April 2009 в 11:28
поделиться

3 ответа

Править: Я нашел еще лучшее решение, которое работает с ResourceDictionaries:

Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri("/test;component/myresource.xaml");

Ну, я не мог заставить это работать с ResourceDictionaries, таким образом, я использую старые добрые Файлы ресурсов вместо этого ;) Для любого заинтересованного, вот то, как я сделал это:

Assembly a = Assembly.LoadFile(@"C:\temp\test.dll");
ResourceManager rm = new ResourceManager("NameOfResource", a);
object o = rm.GetObject("xyz");

Можно получить "NameOfResource" с Отражателем как предложенный Ian.

10
ответ дан 30 November 2019 в 17:16
поделиться

Захватите копию Отражателя (Lutz передал это теперь). Используйте это для рассмотрения блока и пространства имен и т.д. ресурсов в нем.

Затем считайте во встроенном ресурсе что-то вроде этого;

Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
using (System.IO.Stream s = asm.GetManifestResourceStream(<yourname>)
{
    using (System.IO.StreamReader reader = new System.IO.StreamReader(s))
    {
        string xml = reader.ReadToEnd();
    }
}
2
ответ дан 30 November 2019 в 17:16
поделиться

Вам действительно нужно написать Uri следующим образом:

Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"pack://application:,,,/test;component/myresource.xaml");
21
ответ дан 30 November 2019 в 17:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: