My Firebase私には3つの質問があります。私はアプリを作っていて、問題に遭遇しました。私はFirebaseのすべてのデータを持っていますが、それを取得することはできますが、クリックすると、そのアルバムのトラックを含む新しいインテントが開きます。また、いくつかのアルバムにはボーナストラックが含まれているので、それらを表示する方法も知りたいですか?私が得ることができるあらゆる種類の援助に感謝します。以下は私のコードです:フラグメント内でonItemClickListennerを使用していますか?
私は(私のために)問題を解決した方法public class AlbumsFragment extends Fragment implements ValueEventListener{
public static final String LOG_TAG = "FB_database_tag";
public static final String DB_NAME = "MetalApp";
@BindView(R.id.lvAlbums) ListView lvAlbums;
public static final String TITLE = "Albums";
public static final String ALBUMS = "Albums";
private DatabaseReference mDatabaseReference;
private AlbumsAdapter adapter;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public AlbumsFragment() {}
@Nullable
@Override
public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.albums_fragment, container, false);
ButterKnife.bind(this,view);
this.mDatabaseReference = FirebaseDatabase.getInstance().getReference(DB_NAME).child(ALBUMS);
this.mDatabaseReference.addValueEventListener(this);
lvAlbums.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
}
});
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
if(this.mDatabaseReference != null){
this.mDatabaseReference.removeEventListener(this);
}
}
@Override
public void onDataChange(DataSnapshot snapshot) {
Log.d(LOG_TAG, snapshot.getChildrenCount()+"");
Log.d(LOG_TAG, snapshot.getKey()+"");
List<Album> albumFireList = new ArrayList<>();
Object obj = snapshot.getValue();
albumFireList = mapAlbums((HashMap<String, HashMap>) obj);
Collections.sort(albumFireList, new Comparator<Album>() {
@Override
public int compare(Album album, Album a1) {
return album.getYear() - a1.getYear();
}
});
adapter = new AlbumsAdapter(albumFireList);
this.lvAlbums.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(LOG_TAG, databaseError.getMessage());
}
private List<Album> mapAlbums(HashMap<String, HashMap> map)
{
List<Album> result = new ArrayList<>();
Set<String> keys = map.keySet();
for (String key : keys) {
HashMap<String, Object> album = map.get(key);
String id = (String) album.get("id");
String publisher = (String) album.get("publisher");
String title = (String) album.get("title");
List<Track> tracks = mapTracks((HashMap)album.get("tracks"));
long year = (long) album.get("year");
Album a = new Album(id, publisher, title, tracks,(int)year);
result.add(a);
}
return result;
}
private List<Track> mapTracks(HashMap<String, Object> trackMap)
{
List<Track> result = new ArrayList<>();
Set<String> keys = trackMap.keySet();
for (String key : keys) {
String id = (String) trackMap.get("id");
String title = (String) trackMap.get("title");
Track t = new Track(id, title);
result.add(t);
}
return result;
}
}
public class Album {
String mId;
String mPublisher;
String mTitle;
List<Track> mTracks;
// List<Bonus> mBonus;//
int mYear;
public Album() {}
public Album(String id, String publisher, String title, List<Track> tracks, int year) {
this.mId = id;
this.mPublisher = publisher;
this.mTitle = title;
this.mTracks = tracks;
// this.mBonus = bonus;
this.mYear = year;
}
public String getId() {return mId;}
public void setId(String Id) {this.mId = mId;}
public String getPublisher() {return mPublisher;}
public void setPublisher(String publisher) {this.mPublisher = publisher;}
public String getTitle() {return mTitle;}
public void setTitle(String title) {this.mTitle = title;}
public List<Track> getTracks() {return mTracks;}
public void setTracks(List<Track> tracks) {this.mTracks = tracks;}
/* public List<Bonus> getBonus() {return mBonus;}
public void setBonus(List<Bonus> bonus) {this.mBonus = bonus;}*/
public int getYear() {return mYear;}
public void setYear(int year) {this.mYear = year;}
}
私の主な問題は、自分のアルバムをクリックできるように設定する方法です(コードの最初の部分(onItemClick)を見ることができます)。クリックすると、新しいインテントがリストで開きますそのアルバムのトラックの。また、私はアプリケーションを拡張するクラスがありません。 – JoelTRowe
ええ、onClickに新しいインテントを開始してください(カスタム配列アダプターから項目を取得してください)。フラグメントから、アプリケーションをgetActivity()から取得する必要があります。getApplication()(アプリケーションを拡張するクラスにアプリケーションをキャストする必要があります) – Konrad
Ok ...新しいインテントonClickを開始し、クリックすると新しい空を開きますアクティビティ。次に、私は次のことをどうやって管理するのですか:クリックしたら、空のアクティビティに自分のトラックが含まれています。さて、私はIntent(別のアクティビティでいくつかのテキストを表示する)の基本を知っていますが、トラックをどのように表示するかわからないので、それらがFirebase上にあるため、何とか検索する必要があります。どのようにすればいいか分かりますか?もう1つ、私のクラスのアルバムは今すぐSerializableを実装します。自分の投稿を私の投稿(My Firebase)の最初にチェックすることができます。 – JoelTRowe