Java Andriod 中的“活动”[关闭]

问题描述 投票:0回答:1

有人可以解释一下 Java Android Studio 2022.3.1.9 中“Activity/AppCompatActivity”的原理吗?

我正在尝试“android.widget.GridView”。每个单元格都包含一个整数,例如1、2 或 3。如果有人单击 GridView 的单元格,我将使用相应的“gridview.setOnItemClickListener”来查看新活动。创建事件和相应的新活动的标准方法是:

    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id){

            Intent intent = new Intent(getApplicationContext(), DisplayMessageActivity.class);
            String message = String.valueOf(position);  //
            intent.putExtra(EXTRA_MESSAGE, message);
            intent.putExtra(EXTRA_CONTEXT, getApplicationContext().toString());
            startActivity(intent);
        }
    });

不幸的是,我不喜欢 lambda,所以我将代码扩展/重构为这种形式:

class ImplementingMyOnItemClickListener extends AppCompatActivity implements AdapterView.OnItemClickListener  {

    android.content.Context context = null;
    Class<?> cls = DisplayMessageActivity.class; // SingleViewActivity.class -  see below
    public Intent sent_intent = null;

    @Override
    public void onItemClick(AdapterView<?> t_parent, View t_view, int t_position, long t_id) {

        Intent i = new Intent(this.context, cls); //
        i.putExtra("id", String.valueOf(t_position));
        sent_intent = i;
        this.context.startActivity(i); -- THIS IS WORKING OK --- and why ? 
        this.startActivity(i); -- THIS DOES NOT WORK --- and why ? 

    }//

}//

和“class ImplementingMyOnItemClickListener:protected void onCreate(Bundle savedInstanceState)”是从“public class

MainActivity extends AppCompatActivity" class using this code:

@Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

        ImplementingMyOnItemClickListener oicl = new ImplementingMyOnItemClickListener();
        oicl.context = this; //
        gridview.setOnItemClickListener(oicl);

    }// protected void onCreate

我的问题是:在“类 ImplementingMyOnItemClickListener”中,我使用“this.context.startActivity(i);”调用新活动并且“上下文”变量是从“public class MainActivity extends AppCompatActivity: protected void onCreate”方法传递的。为什么不能使用“this.startActivity(i);”而不是“this.context.startActivity(i);” ???我认为上下文必须是本地的而不是父级的。

“公共类 SingleViewActivity”是这样的:

public class SingleViewActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.single_view);

        // Get intent data
        Intent i = getIntent();

        // Selected image id
        int position = i.getExtras().getInt("id");
        ImageAdapter imageAdapter = new ImageAdapter(this);

        ImageView imageView = (ImageView) findViewById(R.id.SingleView);
        imageView.setImageResource(imageAdapter.mThumbIds[position]);
    }
}

如果有人需要,这里有AndroidStudio Giraffe的完整源代码:

https://uloz.to/file/ITdJ5OAxisD6/054-apk-03-gridview-zip#!ZGIvLGR2AmZmAGVmMzZ4AQZ4LwqxAGMRp2yJp3AkpKZlEzMvBN==

这是一面镜子:

https://drive.google.com/file/d/1AaSqKYc0SQgyV4zrR3f6t-q4qD8a3w7i/view?usp=sharing

我不明白为什么“this.startActivity(i);”不起作用。

java android android-studio android-activity
1个回答
0
投票

this.context
指的是
Activity
的上下文。它是本地的。
this.context.getApplicationContext()
指的是
Application Context
。它不是本地的。

this.context.startActivity()
启动一个
Activity
,它与调用
startActivity()
的活动具有相同的应用程序上下文。

比如

Activity1
调用
this.context.startActivity(Activity2.class)
,那么就得到了
Activity1
的应用上下文。然后,如果
Activity2
Activity1
具有相同的应用程序上下文,则启动
Activity2

© www.soinside.com 2019 - 2024. All rights reserved.