【问题标题】:Restarting activity inside onClick method在 onClick 方法中重新启动活动
【发布时间】:2014-09-15 22:21:12
【问题描述】:

我有一个应用程序可以读取 .txt 文件并在表格布局中显示内容。

这是我的 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 方法中重新创建表?

编辑:这是保存上下文的方式

Context context;

public TableLayout(Context context, int rowNr) {

    super(context);

    this.context = context;

【问题讨论】:

  • 展示你如何初始化上下文......此外:你的 MyOnClickListener 有一个构造函数,但它是一个活动,所以你不会调用它
  • 感谢您的快速回复。我这样做是为了传递参数。它扩展了 MainActivity,因此可以调用 setContentView()。你有其他建议吗?

标签: android android-activity restart


【解决方案1】:

我可能会做这样的事情

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

P.S:我还没有编译,但你可以理解

【讨论】:

  • (1) 为什么MyOnClickListener extends MainActivity?这似乎是不必要的。 (2) OP 的问题措辞有点奇怪......但是在阅读了他的整个问题之后,他似乎不想重新启动整个活动...... OP 只想重置活动布局的特定部分。所以使用 recreate() 几乎肯定不是 OP 想要的。
  • (1) 我扩展了MainActivity,因为这是他使用的并且可能是他的应用程序需要的,所以我没有在他的onClick 中更改这个(2) 他正在使用setcontentview(),这意味着他不只是寻找布局的一部分,而是所有布局..如果他想改变布局的某些部分,我建议使用 Fragment
  • class MainActivity extends Activity implements OnClickListener 怎么样?
  • 是的,这也可以.. 但由于我不知道他在所有活动中都有什么.. 我不想改变他组织活动的方式.. 可能是活动扩展 MainActivity 具有不同的行为,并且它们与 MainActivity 共享其他一些行为
  • 他在问题中只提到了一项活动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多