所以我有一个自定义的listview。就像Instagram布局一样,每个列表项中都有1张图片和一堆按钮。所以这是问题所在:
我要实现共享按钮。为此,我尝试创建一个从适配器到活动的回调。但这似乎没有用。这是我到目前为止的内容(我裁剪了不相关的部分):
主要活动
public class MainActivity extends ActionBarActivity implements ListAdapter.OnShareClickedListener{
ListView main_list;
List<String> url_list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
main_list = (ListView) findViewById(R.id.listView);
ListAdapter nListAdapter = new ListAdapter(context, url_list);
main_list.setAdapter(nListAdapter);
}
@Override
public void ShareClicked(String url) {
Log.e("Test",url);
}
}
列表适配器
public class ListAdapter extends BaseAdapter implements View.OnClickListener {
OnShareClickedListener mCallback;
Context context;
public static List<String> url_list;
public ListAdapter(Context c, List<String> list) {
this.context = c;
url_list = list;
}
public interface OnShareClickedListener {
public void ShareClicked(String url);
}
@Override
public void onClick(View v) {
mCallback.ShareClicked("Share this text.");
}
}
}
错误日志:
Attempt to invoke interface method 'void com.packagename.ListAdapter$OnShareClickedListener.ShareClicked(java.lang.String)' on a null object reference
您需要告诉适配器使用哪个OnShareClickedListener()实现。现在,在您的适配器中,从未将字段mCallback分配给它,或者您需要在适配器中具有setOnSharedClickedListener()方法,然后从mainActivity调用该方法并将其设置为mainActivity的实现,或者需要使用构造函数。
我的建议是使用setter而不是构造函数。因此,您需要做的就是这个。
您的ListAdapter
public class ListAdapter extends BaseAdapter implements View.OnClickListener {
OnShareClickedListener mCallback;
Context context;
public static List<String> url_list;
public ListAdapter(Context c, List<String> list) {
this.context = c;
url_list = list;
}
public void setOnShareClickedListener(OnShareClickedListener mCallback) {
this.mCallback = mCallback;
}
public interface OnShareClickedListener {
public void ShareClicked(String url);
}
@Override
public void onClick(View v) {
mCallback.ShareClicked("Share this text.");
}
}
您的MainActivty
public class MainActivity extends ActionBarActivity implements ListAdapter.OnShareClickedListener{
ListView main_list;
List<String> url_list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
main_list = (ListView) findViewById(R.id.listView);
ListAdapter nListAdapter = new ListAdapter(this, url_list);
nListAdapter.setOnShareClickedListener(this);
main_list.setAdapter(nListAdapter);
}
@Override
public void ShareClicked(String url) {
Log.e("Test", url);
}
}
我正在寻找在Android中使用列表适配器和Recyview适配器的区别。关于性能的任何不同,使用它们的利弊。
我无法填充Firebase回收适配器。我最终想做的是,用户搜索一个名称,数据库中的结果将填充回收人员视图。 数据库结构如下所示: 要填充的代码如下所示,全部位于: 现在我只想让它填充数据库中的所有用户,但似乎什么都没有填充。 是一个。 这是UsersViewHolder类:公共静态类UsersViewHolder扩展了RecyclerView。视图持有者{View mView;TextView m
问题内容: 我的片段中有一个方法。此方法启动一个新的活动。我想从我的调用此方法。 这是我的代码: HomeFragment.java StaggeredAdapter.java 我该怎么做? 问题答案: 编辑: 这是我现在要使用的。下面提供了较旧的“更轻松”的解决方案。 现在,可以从适配器中的任何位置调用该片段中的方法。 而且,除了通过构造函数提供侦听器之外,我们还可以在适配器中添加另一个方法,例
我想从我的回收器视图中的给定项目位置获取视图,但持有者总是为空,我不知道为什么。
将 HTTP 参数转换成一个函数参数的过程是一个典型适配过程,执行这个过程的对象被称为适配器了。 Nutz.Mvc 提供了 org.nutz.mvc.HttpAdaptor 接口,隔离了这种行为。 在每一个入口函数上,你都可以通过注解 @AdaptBy 来声明如何适配 HTTP 参数。当然,你 没必要在每一个入口函数上都声明,在子模块类上声明,或者在整个应用的主模块上声明均可。 如何使用适配器?
在Casbin中,策略存储作为adapter(Casbin的中间件) 实现。 Casbin用户可以使用adapter从存储中加载策略规则 (aka LoadPolicy()) 或者将策略规则保存到其中 (aka SavePolicy())。 为了保持代码轻量级,我们没有把adapter代码放在主库中。 目前支持的适配器列表 Casbin的适配器完整列表如下。 我们欢迎任何第三方对adapter进行