从另一个活动中隐藏Listview中的ImageView

时间:2015-09-02 04:29:47

标签: android android-intent android-activity

主要活动的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

它崩溃了我的应用。如果有人可以帮助我。

4 个答案:

答案 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);
}

谢谢大家。