gpt4 book ai didi

java - Android 中的新类遇到问题

转载 作者:行者123 更新时间:2023-12-01 14:04:25 24 4
gpt4 key购买 nike

我对 Java 真的很生疏,而且我是 Android 新手,我整理了一些代码,当它们都在 MainActivity 类中时,它们可以完美地工作。但现在我想清理这些函数并将它们放入自己的类中以使代码看起来更漂亮。这是我正在尝试做的一个例子。我在 IDE 中没有收到任何错误,但当 MainActivity 尝试运行 setArtist 和 setAlbum 函数时,我的设备崩溃了。

public class MainActivity extends Activity {

private ListView lv;
String path, selectedFromList;
ArrayAdapter<String> adapter;
public ViewFiller k = new ViewFiller();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

lv = (ListView) findViewById(R.id.listView1);

k.setArtist();
k.setAlbums();

adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, k.getAlbums());
lv.setAdapter(adapter);

ImageButton albumButton = (ImageButton) findViewById(R.id.albumButton);
ImageButton artistButton = (ImageButton) findViewById(R.id.artistButton);

albumButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
k.album(lv, adapter);
}
});

artistButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
k.artist(lv, adapter);
}
});

}

}

这是我遇到问题的类(class)......

public class ViewFiller extends MainActivity  {

public ViewFiller(){
}

ArrayList<String> Albums = new ArrayList<String>();
ArrayList<String> Artist = new ArrayList<String>();
LinkedHashSet<String> hs = new LinkedHashSet<String>();

public ArrayList<String> getAlbums() {
return Albums;
}

public void setAlbums() {

String selection = AudioColumns.IS_MUSIC + " != 0";
String[] projection = { BaseColumns._ID, AudioColumns.ALBUM };
Cursor c = this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection,
selection, null, null);

while (c.moveToNext()) {
Albums.add(c.getString(1));
}
hs.clear();
hs.addAll(Albums);
Albums.clear();
Albums.addAll(hs);
}


public ArrayList<String> getArtist() {
return Artist;
}

public void setArtist() {

String selection = AudioColumns.IS_MUSIC + " != 0";
String[] projection = { BaseColumns._ID, AudioColumns.ARTIST, };
Cursor c = this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection,
selection, null, null);

while (c.moveToNext()) {
Artist.add(c.getString(1));
}

hs.clear();
hs.addAll(Artist);
Artist.clear();
Artist.addAll(hs);
}

public void artist(ListView lv, ArrayAdapter<String> s) {
lv.setAdapter(null);
s = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, Artist);
lv.setAdapter(s);
}

public void album(ListView lv, ArrayAdapter<String> s) {
lv.setAdapter(null);
s = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, Albums);
lv.setAdapter(s);

}

}

最佳答案

我认为您不希望 ViewFiller 成为一项 Activity ...但我可能是错的。如果它只是一个常规类,您用来创建主 Activity 使用的某个对象,并且您需要访问 MainActivity,只需将上下文传递到该对象的构造函数中即可。

编辑:

尝试这样的方法,我对 Android 也有点生疏,所以我不确定它是否会起作用(我可能完全错了,抱歉):

Activity activity;
public ViewFiller(Activity activity){
this.activity = activity;
}

和...而不是 this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,投影,
选择,空,空);

尝试:

activity.getContentResolver().query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 投影, 选择, null, null);

在您的主要 Activity 中:ViewFiller k = new ViewFiller(this);

但是,我不确定这是否是您想要的。因此,如果我在某些地方出错,我深表歉意。

关于java - Android 中的新类遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19030030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com