【问题标题】:Accesing the size of arraylist of another class访问另一个类的arraylist的大小
【发布时间】:2018-12-31 06:10:18
【问题描述】:

您好,我在片段上,想要访问我声明 Arraylist 为的数组列表大小:

 public static ArrayList<Data> mydata;

在 Activity 类中

返回大小的方法是:

 public int returnsize(){
    return mydata.size();
}

在 FRAGMENT 上,我将其检索为:

//Myaudio is the class/activity from where i want to access
Myaudio myaudio = new Myaudio();
myaudio.returnsize;

但是没有运气..请帮助我有没有更好的方法...

【问题讨论】:

  • 您需要将 ArrayList 传递给片段。在上面的代码中,您正在创建一个新实例。不会得到 prev 值。 stackoverflow.com/a/39868180/2633909
  • 您是否在 mydata 列表中初始化并添加了任何内容?显示更多代码 如果列表是静态的,您可以通过调用 ClassName.mydata.size(); 来获取数据;
  • 是的..mydata 包含音频文件...请查看编辑
  • @AmanthRai 你想在 Fragment 中访问mydata??
  • 我只想要 size()。片段中的mydata

标签: android


【解决方案1】:

您可以使用回调来在活动和片段之间进行对话。

方法如下

创建一个接口,例如:ITalkToActivity

public interface ITalkToActivity{
    int getMyDataSize();
}

在您的活动中实现上述内容,您的活动应返回 myData 列表的大小。

@Override
  public int getMyDataSize(){
  return mydata.size();
}

private startYourFragment(){
 Fragment yourFragment = YourFragment(this)  //setting listener i.e ITalkToActivity for fragment 
 supportFragmentManager.beginTransaction().replace(R.id.root, yourFragment, "YOUR_FRAGMENT").commit()
 supportFragmentManager.executePendingTransactions()
}

您的 Fragment 构造函数应将 ITalkToActivity 的实例保存在全局变量中,并在需要时访问它。

public class YourFragment extends Fragment{

private ITalkToActivity iTalkToActivity;

 YourFragment(ITalkToActivity iTalkToActivity){
   this.iTalkToActivity=iTalkToActivity
 }

  private void yourFunction(){
    int dataSize = iTalkToActivity.getMyDatatSize();
  }

}

【讨论】:

  • 我创建了一个像你提到的界面我有两个活动我应该在哪里保存界面的实例..
  • 在一个java文件中单独创建接口,并在你想要列表大小的activity中实现它!
  • 是的,它在一个单独的 java 文件中......我在 Myaudio 活动中实现了它,我想要 arraylist size()。现在如何通知片段获取大小
  • 检查我的答案,我已经解释过了,它只是设置了创建片段的接口实例,并使用全局变量在任何地方访问它
  • geeksforgeeks.org/callback-using-interfaces-java 如果您不知道如何设置回调,请阅读此@AmanthRai
【解决方案2】:

你可以像这样直接获取静态ArrayList的大小

 (ActivityName.mydata != null){

  ActivityName.mydata.size();
   }

这里 ActivityName 是声明了 ArrayList 的 Activity 的名称。

【讨论】:

  • 但这不是一个好习惯,因为用户可以直接从片段中操作列表并减少代码的解耦。更好地使用接口作为回调
  • 另一种方法是你必须使用bundle在片段中传递arraylist。
  • 不需要也检查我的答案,因为它使代码解耦并且易于更改实现函数@MayurDabhi
  • 这是可能的,但如果你可以在片段中传递接口实例,那么你应该直接传递数组列表的大小 - @Anmol
  • 是的,如果您在 Fragment 中获得了 arraylist 的实例,那么您必须在两个地方检查是否在 arraylist 中发生了一些状态争议,所以最好不要获取 arraylist 的实例(或任何数据)从活动到片段,因为代码变得脆弱。 @MayurDabhi
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多