从CustomAdapter到Java类获取数据
我有一个列表视图,有一个文本视图和一个按钮。我想将数据从CustomAdapter发送到.class,但我不知道如何发送。那是我的自定义适配器。我可以用我想要的数据来获取日志或祝酒辞,但我不知道如何在不使用意图的情况下发送。谢谢!:) 公共类MyCustomAdapter扩展BaseAdapter实现ListAdapter{ private ArrayList list=new ArrayList(); 私人语境; 公共MyCustomAdapter(ArrayList列表,上下文){ this.list=列表; this.context=上下文; } @凌驾 public int getCount(){ 返回list.size(); } @凌驾 公共对象getItem(int-pos){ 返回列表。获取(pos); } @凌驾 公共长getItemId(int-pos){ 返回0; //如果列表项没有Id变量,只需返回0即可。->>返回list.get(pos.getId(); } @凌驾 公共视图getView(最终整数位置、视图转换视图、视图组父视图){ 视图=转换视图; 如果(视图==null){ LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务); 视图=充气机。充气(R.layout.listapagos,null); } //处理列表中的文本视图和显示字符串 final TextView listItemText=(TextView)view.findViewById(R.id.txtPersona); listItemText.setText(list.get(position)); //处理按钮并添加onClickListeners 按钮BtnPago=(按钮)视图.findViewById(R.id.btn_pago); 最终字符串textbutton=listItemText.getText().toString(); BtnPago.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ Log.e(“按下按钮:”,文本按钮); notifyDataSetChanged(); } }); 返回视图; } }从CustomAdapter到Java类获取数据,java,android,custom-adapter,Java,Android,Custom Adapter,我有一个列表视图,有一个文本视图和一个按钮。我想将数据从CustomAdapter发送到.class,但我不知道如何发送。那是我的自定义适配器。我可以用我想要的数据来获取日志或祝酒辞,但我不知道如何在不使用意图的情况下发送。谢谢!:) 公共类MyCustomAdapter扩展BaseAdapter实现ListAdapter{ private ArrayList list=new ArrayList(); 私人语境; 公共MyCustomAdapter(ArrayList列表,上下文){ this
以下是将接口用作回调的示例
public static interface OnClickCallBack {
public void onClickItem(int index);
}
public class A implements OnClickCallBack {
MyCustomAdapter myAdapter;
{
myAdapter = new MyCustomAdapter (list, context, this); //set this as the callback for myAdapter
}
@Override
public void onClickItem(int index){
String text = myAdapter.getItem(index);
}
}
public class MyCustomAdapter extends BaseAdapter implements ListAdapter {
private OnClickCallBack callback;
public MyCustomAdapter(ArrayList<String> list, Context context, OnClickCallBack cb) {
callback = cb;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
....
BtnPago.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callback.onClickItem(position); //invoke callback
notifyDataSetChanged();
}
});
}
公共静态接口onclick回调{
公共项目(内部索引);
}
公共类A实现OnClickCallBack{
MyCustomAdapter myAdapter;
{
myAdapter=new MyCustomAdapter(列表、上下文、此);//将此设置为myAdapter的回调
}
@凌驾
公共项(整型索引){
String text=myAdapter.getItem(索引);
}
}
公共类MyCustomAdapter扩展BaseAdapter实现ListAdapter{
私有onclick回调;
公共MyCustomAdapter(ArrayList列表、上下文上下文、OnClickCallBack cb){
回调=cb;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
....
BtnPago.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
callback.onClickItem(位置);//调用回调
notifyDataSetChanged();
}
});
}
并且不要忘记将活动添加到AndroidManifest.xml中
<activity
android:name=".YourClassName"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
我刚刚解决了这个问题。只需在我的类下面复制适配器,因为它是唯一使用适配器的类。因此,现在我的类中有数据,我可以根据需要在数据库中执行所有操作。感谢所有试图帮助我的人。myCustomAdapter.getItem(索引)
但这将返回我按下按钮的位置的索引?我需要向按钮侦听器添加一些内容?谢谢,伙计。@Uat我无法理解短语“我不知道如何发送而不使用意图”,您可以使用静态变量,但intent是一个更好的选择,为什么不使用它呢?intent主要用于在活动之间导航,以及它们之间的sed数据,不是吗?问题是我想将字符串textbutton(按钮附近有textview的文本)传输到我调用CustomAdapter的类中t case,getItem返回一个Int,否?有可能将string textbutton传输到我调用CustomAdapter的类中吗?正如我所说,textbutton包含他附近的textview的文本。它返回string
,你是否看到返回列表。get(pos);
在getItem
中?请注意,它是getItem
,而不是getItemId
。String index=“”;String test1=adapter.getItem(index);Log.e(“按钮值”,test1);它表示getItem(int)无法应用于(java.lang.String)的内容对不起,我不明白你的问题是什么。而且索引肯定是一个整数,为什么要使用字符串?我刚刚试过,但当我按下某个按钮时,我得到了带有列表字段值的吐司,但所有列表都消失了。这可能是因为你的意图?谢谢!是的!…当你点击列表中的项目时…这很卑鄙您已选择该项目…因此信息将传递到新活动并通过Toast msg显示。
public class MyCustomAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<String>();
private Context context;
public MyCustomAdapter(ArrayList<String> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int pos) {
return list.get(pos);
}
@Override
public long getItemId(int pos) {
return pos;
//just return 0 if your list items do not have an Id variable. ->> return list.get(pos).getId();
}
class ViewHolder{
TextView listItemText;
Button BtnPago;
ViewHolder(View view)
{
listItemText = (TextView) view.findViewById(R.id.txtPersona);
BtnPago = (Button) view.findViewById(R.id.btn_pago);
}
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if(row == null)
{
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.listapagos, parent,false);
holder = new ViewHolder(row);
row.setTag(holder);
}
else
{
holder = (ViewHolder) row.getTag();
}
holder.listItemText.setText(list.get(position));
holder.BtnPago.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View view=(View) v.getParent();
TextView info=(TextView)view.findViewById(R.id.txtPersona)
Intent i=new Intent(context,YourClassName.class);
i.putExtra("info",info.getText().toString());
context.startActivity(i);
}
});
return row;
}
}
public class YourClassName extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.yourlayout);
String data=getIntent().getStringExtra("info");
Toast.makeText(this, data, Toast.LENGTH_LONG).show();
}
}
<activity
android:name=".YourClassName"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>