- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
感谢您查看我的问题!
我有一个相对简单的循环,它将向我添加到布局中的每个 ImageView 添加一个 onClickListener,但是当尝试向其中添加新的 Intent 时,它会出现以下错误之一:
String[] imageURLs = imageURLsString.split("/");
for (int i = 0; i < imageURLs.length; i++){
ImageView image = new ImageView(this);
image.setLayoutParams(new android.view.ViewGroup.LayoutParams(getPx(182),getPx(256)));
image.setPadding(getPx(3),getPx(3),getPx(3),getPx(3));
final String imageURL = ".../images/" + imageURLs[i];
Picasso.with(this).load(imageURL).into(image);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent;
intent = new Intent(this, ImageActivity.class);
intent.putExtra("URL", imageURL);
startActivity(intent);
}
});
linearLayout.addView(image);
}
将导致“无法解析构造函数'意图......”错误。所以当我寻找解决方案时,人们建议将“this”更改为“MainActivity.this”,但是......
String[] imageURLs = imageURLsString.split("/");
for (int i = 0; i < imageURLs.length; i++){
ImageView image = new ImageView(this);
image.setLayoutParams(new android.view.ViewGroup.LayoutParams(getPx(182),getPx(256)));
image.setPadding(getPx(3),getPx(3),getPx(3),getPx(3));
final String imageURL = ".../images/" + imageURLs[i];
Picasso.with(this).load(imageURL).into(image);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent;
intent = new Intent(MainActivity.this, ImageActivity.class);
intent.putExtra("URL", imageURL);
startActivity(intent);
}
});
linearLayout.addView(image);
}
导致:com.myName.appName.MainActivity 不是封闭类
这是 ImageActivity 类:
public class ImageActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image);
String URL = getIntent().getExtras().getString("URL");
ImageView imageView = (ImageView) findViewById(R.id.image);
imageView.getLayoutParams().height = (int) (imageView.getLayoutParams().width * (Float.valueOf(String.valueOf(1.41))));
Picasso.with(this).load(URL).into(imageView);
}
奇怪的是,我在创建应用程序的过程中做了很多新的意图,但我似乎无法解决这个问题。我在这里缺少什么?
完整代码来自此处
public class DetailsActivity extends AppCompatActivity {
TextView TVWeChatIdValue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
String dataString = getIntent().getExtras().getString("dataString");
String[] itemData = dataString.split(",");
String category = itemData[0];
Log.e("DetailsActivity", category);
String itemID = itemData[1];
Log.e("DetailsActivity", itemID);
String imageURLsString = itemData[2];
Log.e("DetailsActivity", imageURLsString);
String description = itemData[3];
Log.e("DetailsActivity", description);
String price = itemData[4];
Log.e("DetailsActivity", price);
String itemCode = category + itemID;
TextView textView;
textView = (TextView) findViewById(R.id.Title);
textView.setText(getResources().getString(R.string.app_name));
textView = (TextView) findViewById(R.id.ItemReferralValue);
textView.setText(itemCode);
textView = (TextView) findViewById(R.id.ItemPriceValue);
textView.setText(price);
TVWeChatIdValue = (TextView) findViewById(R.id.WeChatIDValue);
new DatabaseTask(this, "details", "GETWECHATID").execute();
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ItemDetailsContent);
String[] imageURLs = imageURLsString.split("/");
for (int i = 0; i < imageURLs.length; i++){
ImageView image = new ImageView(this);
image.setLayoutParams(new android.view.ViewGroup.LayoutParams(getPx(182),getPx(256)));
image.setPadding(getPx(3),getPx(3),getPx(3),getPx(3));
final String imageURL = ".../images/" + imageURLs[i];
Picasso.with(this).load(imageURL).into(image);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent;
intent = new Intent(this, ImageActivity.class);
intent.putExtra("URL", imageURL);
startActivity(intent);
}
});
linearLayout.addView(image);
}
ImageView imageView = (ImageView) findViewById(R.id.ItemDetailsDescription);
String imageURL = ".../images/" + description;
Picasso.with(this).load(imageURL).into(imageView);
}
public void SetWeChatId(String mValue) {
TVWeChatIdValue.setText(mValue);
}
public int getPx(int dimensionDp) {
float density = getResources().getDisplayMetrics().density;
return (int) (dimensionDp * density + 0.5f);
}
}
工作代码
public class MainActivity extends AppCompatActivity {
TextView TVWeChatIdValue;
LinearLayout linearLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView;
textView = (TextView) findViewById(R.id.Title);
textView.setText(getResources().getString(R.string.app_name));
textView = (TextView) findViewById(R.id.SubTitle);
textView.setText(getResources().getString(R.string.slogan));
textView = (TextView) findViewById(R.id.MoreForWomen);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
OpenCatalog("women");
}
});
textView = (TextView) findViewById(R.id.MoreForMen);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
OpenCatalog("men");
}
});
textView = (TextView) findViewById(R.id.MoreForKids);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
OpenCatalog("kids");
}
});
}
public void GetData() {
TVWeChatIdValue = (TextView) findViewById(R.id.WeChatIDValue);
new DatabaseTask(this, "main", "GETWECHATID").execute();
linearLayout = (LinearLayout) findViewById(R.id.NewItemsForWomenContent);
linearLayout.removeAllViewsInLayout();
new DatabaseTask(this, linearLayout, "WOMEN", "GETNEWESTITEMS").execute();
linearLayout = (LinearLayout) findViewById(R.id.NewItemsForMenContent);
linearLayout.removeAllViewsInLayout();
new DatabaseTask(this, linearLayout, "MEN", "GETNEWESTITEMS").execute();
linearLayout = (LinearLayout) findViewById(R.id.NewItemsForKidsContent);
linearLayout.removeAllViewsInLayout();
new DatabaseTask(this, linearLayout, "KIDS", "GETNEWESTITEMS").execute();
}
public void SetWeChatId(String mValue) {
TVWeChatIdValue.setText(mValue);
}
public void ProcessNewItems(LinearLayout mLinearLayout, final String mCategory, final HashMap<Integer, Item> mItems){
for (int i = 0; i < mItems.size(); i++) {
ImageView image = new ImageView(this);
image.setLayoutParams(new android.view.ViewGroup.LayoutParams(getPx(96),getPx(128)));
image.setPadding(getPx(3),getPx(3),getPx(3),getPx(3));
String imageURL = ".../images/" + mItems.get(i).getImageURLs()[0];
Picasso.with(this).load(imageURL).into(image);
mLinearLayout.addView(image);
final int index = i;
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ShowItemDetails(mCategory, mItems.get(index));
}
});
}
}
void ShowItemDetails(String mCategory, Item mItem){
Intent intent = new Intent(this, DetailsActivity.class);
intent.putExtra("dataString", mItem.GetDataString());
Log.e("CatalogActivity", mItem.GetDataString());
startActivity(intent);
}
void OpenCatalog(String mCategory){
//show catalog
Intent intent = new Intent(this, CatalogActivity.class);
intent.putExtra("category", mCategory);
startActivity(intent);
}
public int getPx(int dimensionDp) {
float density = getResources().getDisplayMetrics().density;
return (int) (dimensionDp * density + 0.5f);
}
@Override
public void onResume() {
super.onResume();
GetData();
}
}
最佳答案
您需要使用 Activity
子类的名称,该子类包含创建 OnClickListener
的代码。在许多示例中,这是MainActivity
。但是,您的代码中似乎并非如此。由于您位于名为 DetailsActivity
的类中,因此请使用该名称:
Intent intent = new Intent(DetailsActivity.this, ImageActivity.class);
从我在这里看到的代码来看,我强烈建议您了解 ListView
和 RecyclerView
。它们有点复杂,但是一旦您理解了它们,它们就会为您完成大部分工作,类似于您在这里尝试做的事情。一方面,它们比您自己的代码更高效,因为它们只创建可见的 View 。
让我们更仔细地看看您的另一个示例:
public class MainActivity extends AppCompatActivity {
// ...
void ShowItemDetails(String mCategory, Item mItem){
Intent intent = new Intent(this, DetailsActivity.class);
intent.putExtra("dataString", mItem.GetDataString());
startActivity(intent);
}
}
请注意,ShowItemDetails()
位于 MainActivity
类内。因此,this
指的是该类的一个实例,可以在任何需要 Context
的地方使用。 (有关这方面的更多详细信息,您需要阅读继承和多态性。)
另一方面,您的原始代码在 OnClickListener
的匿名子类内部的方法中创建了一个 Intent
,该方法不能用作 Context
。然而,匿名内部类位于从 Context
继承的 DetailsActivity
内部的方法中。为了访问此外部类的实例,您必须使用 DetailsActivity.this
。
有关更多详细信息,您应该了解特殊的 this
引用和内部类。
关于java - 不是封闭类/新意图无法解析构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40295579/
作为后续问题:Laravel Redirect::intended() conditional fallbacks 我遇到了一个问题,在设置了预期的 URL session 后,即使用户决定不登录而是
我面临一个问题,即与任何意图不匹配的单词,它会假设它属于标记最多的话语的意图。 示例:如果 意图 A 由动物等话语组成 意图 B 包含“水果”等话语 意图 C 由诸如昆虫之类的话语组成 意图 D 由诸
拥有什么实际区别 subroutine fillName(person) type(PersonType), intent(inout) :: person person%name = "
我想知道 Dialogflow 中是否有任何商定的意图、事件和上下文的命名约定。 如果没有,那么如果您分享您自己的命名约定,我将不胜感激! 最佳答案 我发现“只要别人容易理解就行”这句话有点矛盾。如果
我正在尝试了解使用队列的用例。 我的理解:队列意味着一对一。唯一的用例(如果不是罕见的话,很少)是:消息仅供一次使用。 但即使在这些情况下,我也可能想使用主题(只是为了将来安全)。唯一需要额外注意的是
我的 Xcode 是 v10,我正在为 SiriKit 开发一个针对 iOS 12 的自定义 intent。 在 Xcode 10 中,自定义意图是在 .intentdefinition 文件中设计的
我有一个设置了 .intentdefinition 文件的 WidgetKit ,我可以在运行我的 WidgetKit 时从我的枚举中进行选择,但我不确定如何在代码中使用这些信息。 我希望能够根据用户
我需要为意图过滤器注册(在运行时)自定义 BroadcastReceiver 可以在 list 中描述为 并在用户通过按应用程序中的某个按钮退出应用程序时取消注册接收
根据 Fortran 标准: The INTENT (OUT) attribute for a nonpointer dummy argument specifies that the dummy a
我正在使用 Twitter Web Intents 来检查是否有人关注我。现在的问题是;我只在事件对象中获取我自己的屏幕名作为回调。 twttr.events.bind('follow', funct
编辑 很抱歉大家,这只是由于意图名称后面缺少逗号。非常抱歉x: 我最近使用 Microsoft Bot Framework (botbuilder v3.14.0)、Node.js (v8.9.4)
我正在开发的产品: RequeSTLy - Chrome 和 Firefox 扩展设置重定向、修改 header 、切换主机、插入用户脚本 ( https://www.requestly.in/ )
有什么方法可以有目的地合并对话框,这样我就不需要多余的代码片段? bot.dialog('whats-your-name', require('./dialogs/whats-your-name')
我是 Dialogflow 的新手,虽然它很容易理解,但我无法使用自定义事件触发 Intent。 我必须实现的任务是,当在后端 Node.js Webhook 中检测到警报时(例如:老板想要做某事),
在 Microsoft Bot Framework 中,我已经开始对话并运行一些意图,假设“登录”,但是当我向用户询问用户名或密码时,他可能会说“取消该”或“取消登录”,我如何获得此意图:“取消”以及
我使用 LUIS 框架构建了一个运行良好的机器人。在研究过程中遇到了以下几点 与 LUIS 意图连接后;机器人无法检查正则表达式意图喜欢 对于我正在尝试设置的对话框.matches('^helpdes
我想知道 URL 是发布到 facebook 的链接。在 Twitter 上,我可以使用“http://twitter.com/intent/tweet?text=”来发推文。虽然我试图寻找一个,但我
通读,http://www.w3schools.com/angular/angular_directives.asp我遇到了一个在评论中调用指令的例子,具体来说: 您可以在 http://www.w
我在 Stack Overflow 上的许多帖子中读到,可分配数组在传递到虚拟参数为 intent(out) 的子例程中时会被释放。 如果我考虑以下代码: program main real, di
API.ai 的预构建包可让您轻松获得长长的意图列表。目前,我正在尝试利用他们的 smalltalk 包,该包有大约 100 个意图,并对每个意图做出响应。 我正在使用api-ai-recognize
我是一名优秀的程序员,十分优秀!