主要活动的Listview是公共静态,可供所有活动访问。现在我的问题是当第二个活动显示我想隐藏主活动中ListView中的第n个ImageView时。这是我的代码:
(活动1)MainActivity onCreate()
#!/usr/bin/env perl
my $input = 'input';
open my $in, "<", $input
or die "Unable to open '$input' : $!";
my %data;
while (<$in>) {
chomp;
next unless /^XLOC/;
my @split = split;
# model treatment replicate value
$data{ $split[0] }{ $split[1] }{ $split[2] } = $split[6];
}
open my $out, '>', 'output.csv';
print $out "fpkm1 fpkm2\n";
my ( %rep_count, $log_trans_fpkm, %filter, $fpkm );
for my $xloc ( sort keys %data ) {
my ($schx, $schxdex);
for my $treatment ( keys $data{$xloc} ) {
if ('Schx' eq $treatment) {
$schx = $data{$xloc}{$treatment}{ 0 };
} elsif ('Schxdex' eq $treatment) {
$schxdex = $data{$xloc}{$treatment}{ 1 };
} else {
die "Don't know what to do with treatment '$treatment'";
}
}
my (@fpkm_ok) = grep { defined $_ and $_ != 0 and $_ <= 5000 } ($schx, $schxdex);
if ( 2 == scalar @fpkm_ok ) {
print $out join ' ', (@fpkm_ok, "\n");
}
}
(活动2)MessageThread.java onCreate()
fpkm1 fpkm2
20.8907 12.5572
7.25738 6.52573
4.10985 3.24867
它崩溃了我的应用。如果有人可以帮助我。
答案 0 :(得分:0)
这可能对你有帮助......
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView lvinlist= (ListView) findViewById(id.msgList);
ImageView greenbtn= (ImageView) lvinlist.getItemAtPosition(extras.getInt("pos"));
greenbtn.setVisibility(View.VISIBLE);
MainActivty.lvmsgs.getChildAt(nthChild).setVisibility(false);
}
答案 1 :(得分:0)
反过来说,这意味着让MainActivity负责隐藏图像,而不是MessageThread。
你拥有它的一个问题是,Android可以在任何时候看不到MainActivity,包括MessageThread所涵盖的内容。所以,你的方式可能在大部分时间都有效,但它不可靠。
相反,您可以设置全局标志,也可以使用某种消息传递通信。然后,当MainActivity恢复时,检查标志或其他内容并执行隐藏图像的工作。
例如,您可以将Application类子类化为存储全局变量。您不能依赖对MainActivity的访问权限,但您可以依赖Application。然后,查看生命周期文档并选择一个好点来进行隐藏工作。可能在onResume()。
答案 2 :(得分:0)
您可以创建一个扩展Application
的类,并可以引用其他Activity
中的context
Activity
。我发布了一些代码供您参考。
AppController - 我们的应用程序类
public class AppController extends Application {
ActionChooserActivity activity;
private static AppController instance;
public static AppController getInstance() {
return instance;
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public void setCurrentActivity(ActionChooserActivity activity) {
this.activity = activity;
}
public ActionChooserActivity getCurrentActivity() {
return activity;
}
}
然后在你的MainActivity
做类似的事情:
AppController appController;
然后在onCreate()
MainActivity
初始化AppController
这样的对象
appController = (AppController) getApplication();
appController.setCurrentActivity(this);
然后在包含Activity
的{{1}}中执行以下操作:
ListView
AppController appController;
中的
onCreate()
并点击按钮,调用appController = (AppController) getApplication();
MainActivity
请参阅此处appController.getCurrentActivity().showToast();
是在&#39; MainActivity&#39;中创建的虚拟方法。这样创建一个这样的方法并隐藏你的showToast()
。
是的,确保你声明了AppController&#39;在ImageView
文件中的应用程序标记中,如下所示:
Android Manifest
答案 3 :(得分:0)
我修好了。我的第二个活动的代码是:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ImageView greenBtn= (ImageView) MainActivity.lvmsgs.getChildAt(extras.getInt("pos")).findViewById(R.id.greenButton);
greenBtn.setVisibility(View.INVISIBLE);
}
谢谢大家。