2014-09-15 2 views
0

У меня есть приложение, которое читает TXT-файл и отображает содержимое в макете таблицы.Перезапуск активности внутри метода onClick

вот мой MainActivity.java файл:

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(new TableLayout(this,0)); 
    }  
} 

Внутри TableLayout класс при добавлении первой строки (заголовки), я также добавить на клик слушателей.

Вот код, который запускается на выполнение, когда происходит щелчок:

public class MyOnClickListener extends MainActivity implements OnClickListener { 

    int rowNumber; 
    public MyOnClickListener(int rowNumber) { 
     this.rowNumber = rowNumber; 
    } 

    @Override 
    public void onClick(View v) { 
     setContentView(new TableLayout(context,rowNumber));   
    } 
}; 

контекст сохраняется с момента, когда активность первого начала, но я получаю ошибку nullpointexception с этим в качестве аргумента. То, что я хотел бы сделать, когда щелкнул заголовок, - это воссоздать таблицу с аргументом номера заголовка. Итак, мой вопрос - что мне делать, чтобы перезапустить создание таблицы в методе onClick?

Edit: это как контекст сохраняется

Context context; 

public TableLayout(Context context, int rowNr) { 

    super(context); 

    this.context = context; 
+0

Покажите, как вы инициализируете контекст ... Кроме того: ваш MyOnClickListener имеет конструктор, но это действие, поэтому вы не будете называть это – stealthjong

+0

Спасибо за быстрый ответ. Я сделал это таким образом, чтобы передать параметры. И он расширяет MainActivity, поэтому setContentView() можно вызвать. Вы предлагаете другой путь? – user2961826

ответ

0

я бы, вероятно, сделать что-то вроде этого

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(new TableLayout(this, getRowNumber())); 
    } 

    protected int getRowNumber(){ 
     return 0; 
    }  
} 

, а затем вы делаете что-то вроде

public class MyOnClickListener extends MainActivity implements OnClickListener { 

    // here you initialize rowNumber 
    static int rowNumber = 0; 

    @Override 
    protected void getRowNumber(){ 
     return rowNumber; 
    } 

    @Override 
    public void onClick(View v) { 
     // here you set your rowNumber 
     rowNumber = some_value; 
     recreate();   
    } 
}; 

PS: Я гавань 't составлено это, но вы можете получить идею

+0

(1) Почему «MyOnClickListener расширяет MainActivity»? Это кажется ненужным. (2) Вопрос OP сформулирован немного странно ... но после прочтения всего его вопроса, похоже, он не хочет перезапускать всю деятельность ... OP просто хочет сбросить определенную часть макета активности. Поэтому использование 'recreate()' почти наверняка не является тем, что ищет OP. –

+0

(1) Я расширил 'MainActivity', потому что это то, что он использовал, и может быть его приложение требует, чтобы я не изменил это (2) в его' onClick', он использует 'setcontentview()', что означает, что он не ищет просто часть макета, но все макеты .. если бы он искал какую-то часть макета, я бы предложил использовать ** Фрагмент ** –

+0

Как насчет 'класс MainActivity extends Activity реализует OnClickListener'? –

Смежные вопросы