【问题标题】:how to get Custom listview adapter value and set value in two edittext one by one如何在两个edittext中一一获取自定义列表视图适配器值和设置值
【发布时间】:2018-07-29 19:13:36
【问题描述】:

CustomListAdapter.class

如何从listview中获取TextView eng的值,并在两个不同的edittext中一一设置。

public class CustomListAdapter extends ArrayAdapter<DataModel> implements View.OnClickListener{

    Context mContext;
    ArrayList<DataModel> dataSet;

    public CustomListAdapter(ArrayList<DataModel> dataModels, Context context) {
        super(context, R.layout.route, dataModels);
        this.dataSet = dataModels;
        this.mContext = context;
    }
    private static class ViewHolder {
        TextView eng;
        TextView hindi;
    }

    @Override
    public void onClick(View v) {
        int position = (Integer) v.getTag();
        Object object = getItem(position);
        DataModel dataModel = (DataModel) object;
        switch (v.getId()) {
            case R.id.eng:
                String s = dataModel.getStationEng();
                //mStart.(FareCalculatorActivity.class).getClasses().setText(s.trim().toUpperCase().toString());
                break;

            case R.id.hindi:
                String s1 = dataModel.getStationEng();
                break;
        }
    }
    private int lastPosition = -1;
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        DataModel dataModel = getItem(position);
        ViewHolder viewHolder;
        final View result;

        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.route, parent, false);
            viewHolder.eng = convertView.findViewById(R.id.eng);
            viewHolder.hindi = (TextView) convertView.findViewById(R.id.hindi);
            result = convertView;
            convertView.setTag(viewHolder);
        }
        else
        {
            viewHolder = (ViewHolder) convertView.getTag();
            result = convertView;
        }
        Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top);
        result.startAnimation(animation);
        lastPosition = position;
        viewHolder.eng.setText(dataModel.getStationEng());
        viewHolder.hindi.setText(dataModel.getStationhindi());
        viewHolder.eng.setOnClickListener(this);
        viewHolder.eng.setTag(position);
        viewHolder.hindi.setOnClickListener(this);
        viewHolder.hindi.setTag(position);
        return convertView;
    }
}

从自定义列表视图适配器中获取值并将值一一设置为edittext。
这个listview是filter listview,我想要listview的值并设置为edittext

【问题讨论】:

  • 看看我添加的答案,应该做要求的工作。

标签: java android listview android-edittext


【解决方案1】:

要么创建一个单独的回调接口,要么使用View.OnClickListener。特此修改您现有的适配器类。

public class CustomListAdapter extends ArrayAdapter<DataModel> {

    Context mContext;
    ArrayList<DataModel> dataSet;
    View.OnClickListener listener;

    public CustomListAdapter(ArrayList<DataModel> dataModels, Context context, View.OnClickListener listener) {
        super(context, R.layout.route, dataModels);
        this.dataSet = dataModels;
        this.mContext = context;
        this.listener = listener;
    }
    private static class ViewHolder {
        TextView eng;
        TextView hindi;
    }


    private int lastPosition = -1;
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        DataModel dataModel = getItem(position);
        ViewHolder viewHolder;
        final View result;

        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.route, parent, false);
            viewHolder.eng = convertView.findViewById(R.id.eng);
            viewHolder.hindi = (TextView) convertView.findViewById(R.id.hindi);
            result = convertView;
            convertView.setTag(viewHolder);
        }
        else
        {
            viewHolder = (ViewHolder) convertView.getTag();
            result = convertView;
        }
        Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top);
        result.startAnimation(animation);
        lastPosition = position;
        viewHolder.eng.setText(dataModel.getStationEng());
        viewHolder.hindi.setText(dataModel.getStationhindi());
        viewHolder.eng.setOnClickListener(listener);
        viewHolder.eng.setTag(position);
        viewHolder.hindi.setOnClickListener(listener);
        viewHolder.hindi.setTag(position);
        return convertView;
    }
}

现在更改您在活动/片段中初始化适配器的调用,如下所示

CustomListAdapter adapter = new CustomListAdapter(data,context,new View.OnClickListener() { 
    @Override
    public void onClick(View v) {
        int position = (Integer) v.getTag();
        Object object = getItem(position);
        DataModel dataModel = (DataModel) object;
        switch (v.getId()) {

            case R.id.eng:
                String s = dataModel.getStationEng();
                //mStart.(FareCalculatorActivity.class).getClasses().setText(s.trim().toUpperCase().toString());
                // set to editText
                break;

            case R.id.hindi:
                String s1 = dataModel.getStationEng();
                // set to editText
                break;
        }
    }
});

【讨论】:

  • case R.id.hindi: String s1 = dataModel.getStationEng(); //设置为editText //当我在这里调用edittext时它显示错误;
  • 您是否声明了调用此适配器的任何 edittext 实例?我希望您在设置适配器的活动或片段中应该有两个编辑文本。
  • @pankajsharma 有什么问题吗?昨天你已经接受了答案,但今天你似乎撤回了它。请问一下原因。
  • 您能解释一下您现在面临的问题吗?
  • 抱歉我得到了解决方案 if (mStart.isFocused()) { String s = mList.getItemAtPosition(position).toString(); mStart.setText(s); }
【解决方案2】:

解决问题的一些方法是:-

1.使用接口将数据从适配器类传递给活动。

  1. 使用点击监听器上获取的数据调用活动中定义的函数,并使用它来设置编辑文本。

This link will help to find the above mentioned approaches in more detail

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    相关资源
    最近更新 更多