Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从扩展活动的类调用视图_Java_Android_Android Activity - Fatal编程技术网

Java 从扩展活动的类调用视图

Java 从扩展活动的类调用视图,java,android,android-activity,Java,Android,Android Activity,我有一个java类,它扩展了Activity(而不是AppCompatActivity!) 现在我想调用一个在.xml文件中定义的视图。 我该怎么做? 我的应用程序一直崩溃,但如果我让.java类扩展AppCompatActivity,它就不会崩溃 有没有办法解决这个问题 不幸的是,它必须扩大活动范围 .java类 public class pop extends Activity { @Override protected void onResume() {

我有一个java类,它扩展了Activity(而不是AppCompatActivity!)

现在我想调用一个在.xml文件中定义的视图。
我该怎么做?
我的应用程序一直崩溃,但如果我让.java类扩展AppCompatActivity,它就不会崩溃

有没有办法解决这个问题

不幸的是,它必须扩大活动范围

.java类

public class pop extends Activity {

    @Override
    protected void onResume() {
        super.onResume();

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);

        int width = dm.widthPixels;
        int height = dm.heightPixels;

        getWindow().setLayout((int) (width * .8), (int) (height * .4)); // Width * 0,8 == 80% der Fenstergröße

        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Thats where it fails, because it couldnt get the parent-view.
                parent.setBackgroundColor(Color.argb(250,0,0,0));
                finish();
            }
        });
    }

}
pop.java

public class pop extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.popup);

    }

    @Override
    protected void onResume() {
        super.onResume();

        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Thats where it fails, because it couldnt get the parent-view.
                parent.setBackgroundColor(Color.argb(250,0,0,0));
                finish();
            }
        });

        sure.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });
    }

}
我已经找到了解决方案,谢谢大家的帮助!我真的很感激

这里有一种方法(如评论中所述)利用
onResume
,基本上通过设置一个变量来指示pop活动已经启动(请注意,您可能正在使用一个对话框,单击对话框的外侧将具有相同的效果),从而在调用活动中处理所有这些问题

这是相当有限的

public class MainActivity extends AppCompatActivity {

    boolean resumestate = false;
    LinearLayout ll; //The main layout

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ll = (LinearLayout) findViewById(R.id.mainactivity_ll);

    }

    // Invoke the pop activity, setting resumestate to indicate this      
    public void doTestButton(View v) {
        Toast.makeText(this,"You Clicked the Test Button",Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(this,Pop.class);
        startActivity(intent);
        resumestate = true;
    }

    //Check if the activity was invoked and if so set background colour
    @Override
    protected void onResume() {
        super.onResume();
        if (resumestate) {
            ll.setBackgroundColor(Color.argb(250,0,0,0));
            resumestate = false;
        }
    }
}

另一种方法是,使用
startActivityForresult
,通过返回的意图返回背景色(更灵活):-

main活动

public class MainActivity extends AppCompatActivity {

    boolean resumestate = false;
    LinearLayout ll;
    int requestcode = 10;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ll = (LinearLayout) findViewById(R.id.mainactivity_ll);

    }

    public void doTestButton(View v) {
        Toast.makeText(this,"You Clicked the Test Button",Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(this,Pop.class);
        startActivityForResult(intent,requestcode);
        resumestate = true;
    }

    @Override
    protected void onActivityResult(int rqstcode, int resultcode, Intent data) {
        if (rqstcode == requestcode) {
            if (resultcode == Activity.RESULT_OK) {
                int newcolour = data.getIntExtra("BGRNDCOLOUR",Color.argb(250,48,48,48));
                ll.setBackgroundColor(newcolour);
            }
        }
    }
}
按钮的
onClick
方法在
pop
活动中:-

public void doTestButton(View v) {
    int newcolour = Color.argb(250,128,128,128);
    Intent ri = new Intent();
    ri.putExtra("BGRNDCOLOUR", newcolour);
    setResult(Activity.RESULT_OK,ri);
    finish();
}

第三种方法,我认为可能被认为是不好的做法,就是创建一个
publicstatic
方法来改变背景,同时为各自的布局声明静态变量

e、 g.在主活动中,更换
线性布局ll带有
静态线性布局ll然后将适当的方法添加到主要活动中,例如

    public static void alterBackGroundColour(int newcolour) {
        ll.setBackgroundColor(newcolour);
    }
然后在
pop
活动的适当位置使用:-

    MainActivity.alterBackGroundColour(Color.argb(250,128,0,128));

请添加堆栈跟踪和弹出窗口。xml编辑您的问题以包括堆栈跟踪/日志以及相关布局。这将帮助人们确定原因,然后提供答案?我不相信你能从中使用任何东西,因为这是你正在使用的一项活动。i、 e.当你删除它时,看到什么会受到影响,这可能会突出问题/原因。这没有什么区别@MikeT,我尝试过。尝试替换
parent.setBackgroundColor(Color.argb(250,0,0,0))((RelativeLayout)view.getParent()).setBackgroundColor(Color.argb(250,0,0,0))@Sarius太好了,如果你觉得答案有用,我会很感激你把它标记为已回答并投票。没问题,巴德