从CustomAdapter到Java类获取数据

从CustomAdapter到Java类获取数据,java,android,custom-adapter,Java,Android,Custom Adapter,我有一个列表视图,有一个文本视图和一个按钮。我想将数据从CustomAdapter发送到.class,但我不知道如何发送。那是我的自定义适配器。我可以用我想要的数据来获取日志或祝酒辞,但我不知道如何在不使用意图的情况下发送。谢谢!:) 公共类MyCustomAdapter扩展BaseAdapter实现ListAdapter{ private ArrayList list=new ArrayList(); 私人语境; 公共MyCustomAdapter(ArrayList列表,上下文){ this

我有一个列表视图,有一个文本视图和一个按钮。我想将数据从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(); } }); 返回视图; } }
以下是将接口用作回调的示例

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>