Как загрузить XML внутри View в Android?

У меня есть класс, который расширяет вид. У меня есть другой класс, который расширяет активность, и я хочу добавить первый класс, который будет загружен внутри класса активности. Я попробовал следующий код

package Test2.pack;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;

public class Test2 extends Activity {
    /** Called when the activity is first created. */

    static view v;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        

        try{
            v = (view) View.inflate(Test2.this, R.layout.main2, null);
        }catch(Exception e){
            System.out.println(" ERR " + e.getMessage()+e.toString());
        }       
    }
}

class view extends View{
    public view(Context context) {
        super(context);     
    }   
}
 James29 сент. 2010 г., 12:03
Я просто хочу загрузить пользовательское представление в класс, который расширяет View внутри моего класса, который расширяет Activity.

Ответы на вопрос(2)

Предложение: избегайте называть имена ваших классов очень близкими к уже существующим классам (например, View, Activity);

Поскольку вы расширяете View (который по умолчанию не рисует ничего конкретного), вы не можете видеть ничего в своей деятельности.

Начните с расширения объекта TextView, чтобы почувствовать.

public class MyTextView extends TextView {
    public MyTextView(Context c){
    super(c);
}

// ----

public class MyActivity extends Activity {

    MyTextView myTextView;

     @Override 
     protected void onCreate(Bundle savedInstance){
     super.onCreate(savedInstance);
     setContentView(myTextView = new MyTextView(this);

     myTextView.setText("It works!");
}

Надеюсь это поможет!

Решение Вопроса

Хорошо попробовал это, и понял, что это не работает. Проблема в том, что в классе View нет методов для добавления дочерних представлений. Дочерние виды следует добавлять только вViewGroups, Макеты, такие какLinearLayout, расширитьViewGroup, Таким образом, вместо расширения View, вам нужно расширить, например,LinearLayout.

Затем в вашем XML, ссылка на макет с помощью:

<my.package.MyView android:id="@+id/CompId" android:layout_width="fill_parent" android:layout_height="fill_parent"/>

Затем в вашем пользовательском классе надуйте и добавьте:

public class MyView extends LinearLayout {

    public MyView(Context context) {
        super(context);
        this.initComponent(context);
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.initComponent(context);
    }


    private void initComponent(Context context) {

         LayoutInflater inflater = LayoutInflater.from(context);
         View v = inflater.inflate(R.layout.foobar, null, false);
         this.addView(v);

    }

}
 TuomasR29 сент. 2010 г., 12:32
Хм ... мог бы упростить некоторые вещи. initComponent (Context context) может просто содержать: inflate (context, R.layout.foobar, this); и эффект будет таким же.
 ataulm31 дек. 2013 г., 11:24
Вы можете редактировать свои собственные ответы, чтобы улучшить их. Добавление этого в качестве комментария означает, что его могут пропустить все, кто читает этот ответ.

Ваш ответ на вопрос