setContentView和Listeners

时间:2012-02-10 01:48:10

标签: android android-layout

我在某些时候正在更改Activity的ContentView。 (至View2)。 将其更改回View1后,听众就无法工作了。 我已经尝试将Listener放在onResume()方法中。

无论如何使用setContentView()来显示例如进度屏幕/请稍候,...(当asyncTask正在运行时)。 或者你应该为每个活动只有一个mainView吗? (并动态替换内容)。

//编辑:更具体: 我正在寻找像

这样的东西
LinearLayout item = (LinearLayout) findViewById(R.id.mainView);
View child = getLayoutInflater().inflate(R.layout.progress, null);
item.addView(child);

但不是添加“progress.xml”,而是应该删除当前布局,并且只显示“progress.xml”。 我需要一个“容器”并显示/隐藏mainView /进度吗? 但这对我来说似乎不太合适......

另见下面的代码(剥离)

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

       button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                doSomething();
            }
        });
}

setContentView(R.layout.view2);
[...]
setContentView(R.layout.view1);

//Listener not more working

3 个答案:

答案 0 :(得分:2)

谢谢大家的回复。你让我意识到,当我删除或替换(使用setContentView())主视图时,onClickListeners会丢失。我现在以这种方式结束了:

的onCreate:

setContentView(R.layout.parse);
LinearLayout container = (LinearLayout) findViewById(R.id.container);
container.addView(getLayoutInflater().inflate(R.layout.dialog, null));
container.addView(getLayoutInflater().inflate(R.layout.progress, null));

onStartDoingSomething:

findViewById(R.id.dialog).setVisibility(View.INVISIBLE);
findViewById(R.id.progress).setVisibility(View.VISIBLE);

onEndDoingSomehting:

findViewById(R.id.dialog).setVisibility(View.VISIBLE);
findViewById(R.id.progress).setVisibility(View.INVISIBLE);

我可能会将View.INVISIBLE更改为View.GONE,就像nmr所说,但由于我从未使用过View.GONE,我必须首先检查Android doku;)

答案 1 :(得分:1)

假设您使用'findViewById'来初始化'button',那么每次执行setContentView(R.layout.view1)时都需要这样做;

答案 2 :(得分:0)

每个Activity只能有一个UI,您应该创建另一个活动,并在其onCreate方法中设置内容视图

步骤:

  1. 创建活动
  2. 使用以下代码设置内容视图:

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

    }

  3. 在应用程序清单中定义活动:

  4. 在第一个活动中创建一个意图:

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

    按钮按钮=(按钮)findViewById(R.id.button);

    button.setOnClickListener(new OnClickListener(){         @覆盖         public void onClick(查看v){             意图();         }     }); }

    void intent(){

    Intent intent = new Intent(); intent.setClass(Activity1.this,Activity2.class); startActivity(意向);

    }

  5. 你去c: