Как мне работать с нестатическими членами внутри намерения?

#java #android #static

#java #Android #статический

Вопрос:

У меня возникают огромные трудности со статическими членами при попытке создать приложение для Android.

Вот что должно делать приложение:

Есть две вкладки: Мои классы и Список классов, каждая из которых представляет собой отдельные намерения. Суть приложения в том, что когда вы нажимаете кнопку «добавить» рядом с классом в списке классов, он должен динамически обновлять список в разделе «Мои классы». Однако я не могу этого сделать, потому что моя структура данных, содержащая классы, является динамической, но намерение списка классов статично, поэтому я продолжаю получать ошибку «Невозможно ссылаться на нестатический элемент из статического контекста».

Есть ли какой-либо способ использовать динамические намерения, и если да, то как?

Редактировать:

Здесь объявляются намерения:

 public class TabLayout extends TabActivity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = getTabHost(); // The activity TabHost

        Intent intent = new Intent(this, MyClasses.class);
        tabHost.addTab(tabHost.newTabSpec("My Classes")
                .setIndicator("My Classes", res.getDrawable(R.drawable.ic_tab_main))
                .setContent(intent));

        Intent intent2 = new Intent(this, ClassList.class);
        tabHost.addTab(tabHost
                .newTabSpec("Class List")
                .setIndicator("Class List", res.getDrawable(R.drawable.ic_tab_main))
                .setContent(intent2));

        Intent intent3 = new Intent(this, SyncList.class);
        tabHost.addTab(tabHost
                .newTabSpec("Sync List")
                .setIndicator("Sync List", res.getDrawable(R.drawable.ic_tab_main))
                .setContent(intent3));

        tabHost.setCurrentTab(0);

        // Set tabs Colors
        tabHost.setBackgroundColor(Color.BLACK);
        tabHost.getTabWidget().setBackgroundColor(Color.BLACK);

    }
}
  

Вот файл MyClassList:

открытый класс MyClassList расширяет MyClasses {

 int numClasses;
MyClasses myclasses = new MyClasses();
final static TableRow tableRowArray[] = new TableRow[4];
TextView classNameArray[] = new TextView[4];
TextView teacherNameArray[] = new TextView[4];
Button dropButtonArray[] = new Button[4];

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Create containers
    ScrollView classListScrollView = new ScrollView(this);
    TableLayout classListTableLayout = new TableLayout(this); 

    // Add class entries
    for (int i = 0; i < 4; i  )
    {
        tableRowArray[i] = new TableRow(this);
        tableRowArray[i].setLayoutParams(new LayoutParams(
                LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));

        classNameArray[i] = new TextView(this);
        classNameArray[i].setText("");
        classNameArray[i].setPadding(10, 20, 10, 20);
        classNameArray[i].setTextSize(20);
        tableRowArray[i].addView(classNameArray[i]);

        teacherNameArray[i] = new TextView(this);
        teacherNameArray[i].setText("");
        teacherNameArray[i].setPadding(10, 20, 10, 20);
        teacherNameArray[i].setTextSize(16);
        tableRowArray[i].addView(teacherNameArray[i]);

        dropButtonArray[i] = new Button(this);
        dropButtonArray[i].setText("Drop");
        tableRowArray[i].addView(dropButtonArray[i]);

        classListTableLayout.addView(tableRowArray[i], new TableLayout.LayoutParams(
                LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));

        tableRowArray[i].setVisibility(View.GONE);
    }

    classListScrollView.addView(classListTableLayout);
    this.setContentView(classListScrollView);

    dropButtonArray[0].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v)
        {
            myclasses.dropClass(0);
        }
    });
    dropButtonArray[1].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v)
        {
            myclasses.dropClass(1);
        }
    });
    dropButtonArray[2].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v)
        {
            myclasses.dropClass(2);
        }
    });
    dropButtonArray[3].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v)
        {
            myclasses.dropClass(3);
        }
    });

}

public void updateMyClasses(ClassObject myclasses[])
{
    for (int i = 0; i < 4; i  )
    {
        if (myclasses[i].isNull)
        {
            classNameArray[i].setText(myclasses[i].getClassName());
            teacherNameArray[i].setText(myclasses[i].getTeacherName());
            tableRowArray[i].setVisibility(View.VISIBLE);
        }
        else
        {
            tableRowArray[i].setVisibility(View.GONE);
        }
    }
}

public MyClasses getMyClasses()
{
    return myclasses;
}
  

}

Вот файл MyClasses:

открытый класс MyClasses расширяет активность {

 static int numClasses;
static ClassObject MyClassArray[];

public MyClasses()
{   
    MyClassArray = new ClassObject[4];
    for (int i = 0; i < 4; i  )
    {
        MyClassArray[i] = new ClassObject();
    }

    numClasses = 0;
}

public int getNumClasses()
{
    return numClasses;
}

public void dropClass(int c)
{
    for (int i = c; i < 3; i  )
    {
        MyClassArray[i] = MyClassArray[i 1];
    }

    //MyClassList.updateMyClasses(MyClassArray);
}

public void addClass(ClassObject c)
{
    if (numClasses >= 4)
        return;

    MyClassArray[numClasses] = c;

    //MyClassList.updateMyClasses(MyClassArray);
}


public boolean hasClass(ClassObject c)
{
    for (int i = 0; i < 4; i  )
    {
        if (MyClassArray[i].getClassName() == c.getClassName())
            return true;
    }

    return false;
}
  

}

И вот строка, которая выдает ошибку:

 addButtonArray[0].setOnClickListener(new View.OnClickListener() {
            public void onClick(View v)
            {
                MyClasses.addClass(ClassListArray[0]);
            }
        });
  

Комментарии:

1. Почему бы просто не создавать intent при каждом нажатии кнопки и не удалять ключевое слово static перед глобальной переменной Intent .

2. Пожалуйста, вставьте сюда ту часть кода, которая вызывает у вас проблемы

Ответ №1:

Эта строка — ваша проблема:

 MyClasses.addClass(ClassListArray[0]);
  

Вы пытаетесь вызвать метод экземпляра addClass без указания ссылки на MyClasses экземпляр. Как это исправить, зависит от того, где находится код. Встроено ли оно в MyClasses класс?

Комментарии:

1. Я только что добавил код для MyClassList. По сути, я пытался отделить элементы графического интерфейса от фактической структуры данных MyClasses, но у меня все еще возникает проблема с попыткой ссылаться на нестатический элемент (т. Е. Структуру данных MyClasses) из статического контекста (т. Е. Экземпляр classList ).)