我很想在我的应用this中实现可扩展回收视图。 因此,我将一个项目作为进行测试的一部分,并且在我了解到它的工作方式后,在我的应用程序中对其进行了改进,但是遇到了一些问题。
我使用了来自ERV github的this类通过应用程序进行构建,并且我在布局中添加了2个EditText
和2个buttons
,因此如果我在“ GENRE” edittext
中写了一些东西,然后按“ ADDER GENRE”按钮,则会将其存档;如果我在RecyclerView
中放入一些东西,然后按添加艺术家我希望将其添加到EditText
中最后添加的GENRE项目中。
这是我的MainActivity中的代码。
RecyclerView
这是我的适配器代码
公共类GenreAdapter扩展了ExpandableRecyclerViewAdapter {
public class MainActivity extends AppCompatActivity {
public GenreAdapter adapter;
List<Genre> parent;
EditText artistTXT;
EditText genreTXT;
List<Artist> child;
Button addART;
Button addGENR;
RecyclerView mRecyclerView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
artistTXT = findViewById(R.id.ArtistTXT);
genreTXT = findViewById(R.id.GenreTXT);
addART = findViewById(R.id.AddArtist);
addGENR = findViewById(R.id.AddGenre);
child = new ArrayList<>();
parent = new ArrayList<>();
addART.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.addChild(new Artist(artistTXT.getText().toString()));
}
});
addGENR.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.addGroup(new Genre(genreTXT.getText().toString(),null));
}
});
Button clear = findViewById(R.id.toggle_button);
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
BuildRecyclerView();
}
public void BuildRecyclerView(){
mRecyclerView = findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
GenreAdapter adapter = new GenreAdapter(parent,this);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setAdapter(adapter);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
adapter.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
adapter.onRestoreInstanceState(savedInstanceState);
}
}
}
答案 0 :(得分:1)
此答案无效,请参见下面的修改
您有一个包含子组的列表。
因此,如果要将子级添加到最后一个现有组中,只需(在适配器中):
public void addChild(YourChildType child){
// I assume the 'groups' list is accessible in your Adapter
// Retrieve the last group (it's a basic implementation, you may want to check if the list is not empty to prevent an OutOfBoundsException)
GroupType group = groups.get(groups.size());
group.getItems().add(child);
notifyDataSetChanged();
}
如果要添加新组:
public void addGroup(GroupType group){
groups.add(group);
notifyDataSetChanged(
}
编辑:更新的答案
事实证明,一旦创建了适配器(see the response from the author here),就无法更改数据集(p)
因此,您需要将Genre
的列表存储在MainActivity
中。每次您想要更新列表时,都应该这样做:
List<Genre> mGenres;
GenreAdapter mAdapter;
public void addGenre(Genre genre){
mGenres.add(genre);
mAdapter = new GenreAdapter(genres, ...);
mRecyclerView.setAdapter(mAdapter);
}
public void removeGenre(Genre genre){
mGenres.remove(genre);
mAdapter = new GenreAdapter(genres, ...);
mRecyclerView.setAdapter(mAdapter);
}