从ListView适配器转换为RecyclerView适配器的片段
问题描述:
我的项目基于片段,我试图实现HypeLabs网状网络聊天作为额外的功能。如何将附加URL中显示的Hype Labs Github项目中的活动转换为诸如ChatFragment和ContactsFragment之类的片段。从ListView适配器转换为RecyclerView适配器的片段
原来ContactsViewAdapter如下:
public class DirectContactsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
protected final Activity mActivity;
private Map<String, Store> stores;
public DirectContactsAdapter(@NonNull Activity mActivity, Map<String, Store> stores) {
this.mActivity = mActivity;
this.stores = stores;
}
protected Map<String, Store> getStores() {
return stores;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView;
itemView = LayoutInflater.from(mActivity).inflate(R.layout.row_direct_contacts, parent, false);
return new DirectContactsViewHolder(itemView);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof DirectContactsViewHolder) {
final DirectContactsViewHolder directContactsHolder = (DirectContactsViewHolder) holder;
final Store contactsStore = this.stores.get(position);
try {
directContactsHolder.displayName.setText(contactsStore.getInstance().getRealmStringIdentifier());
directContactsHolder.contentIndicator.setVisibility(contactsStore.hasNewMessages
() ? View.VISIBLE : View.INVISIBLE);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(DirectContactsFragment.this, DirectChatsFragment
.class);
TextView displayName = (TextView) view.findViewById(R.id.display_name);
CharSequence charSequence = displayName.getText();
setDisplayName(charSequence.toString());
Store store = chatApplication.getStores().get(getDisplayName());
store.setDelegate(contactActivity);
intent.putExtra(ChatActivity.INTENT_EXTRA_STORE, store.getInstance().getStringIdentifier());
startActivity(intent);
}
});
} catch (Exception e) {
AppHelper.LogCat("Contacts adapters Exception " + e.getMessage());
}
}
}
@Override
public int getItemCount() {
return stores.size();
}
public Store getItem(int position) {
return stores.get(position);
}
public class DirectContactsViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.avatar)
ImageView userImage;
@BindView(R.id.display_name)
TextView displayName;
@BindView(R.id.new_content)
ImageView contentIndicator;
DirectContactsViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}}
我很新的片段和Android Studio生成进一步迷惑我的例子。
任何帮助,高度赞赏。
答
@Victor是否想将某些数据从urler适配器传递给Fragment而不是Activity?如果是这样,你应该使用回调模式。对于这样做ü可以按如下方式创建一个封闭的接口类:
class YourFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
...
DirectContactsAdapter adapter = new DirectContactsAdapter(...);
adapter.setListener(new DirectContactsAdapter.IItemClickListener() {
@Override
void onItemClicked(String identifier) {
//do what u want with identifier
});
}
究竟什么是乌拉圭回合的问题:这样做ü应该实现这个片段后界面
?你想要什么?你的适配器似乎是正确的..但你必须在onBindViewHolder方法中放一些代码来显示 – borune
Hello @borune感谢您的评论。是的RecyclerViewAdapter似乎是正确的,但ListViewAdapter中还有一些尚未实现的东西,例如onTouch事件,它打开另一个传递一些数据的Activity。我也知道我不能在碎片中使用意图,所以我该如何解决这个问题。到目前为止,这是我基于Google的一些研究成果。我上面更新了我的代码。 –