在一个ListView内的特定位置设置文本的TextView [英] Set text to TextView at a particular position inside a ListView

查看:231
本文介绍了在一个ListView内的特定位置设置文本的TextView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是的ListView 使用自定义适配器。我有两个的TextView 每一行内。我需要改变这些的TextView 只有文本,我点击textViews。我怎样才能实现呢?

I am using a ListView with a custom Adapter. I have two TextView inside each row. I need to change the text of these TextView only for the textViews which I click. How can I achieve it?

我里面有一个方法,我的 CustomAdapter ,我初始化的

I have a method inside my CustomAdapter where I initialise the TextView's

public class MainListAdapter extends BaseAdapter {

    private static final String TAG = "MainListAdapter";

    private Context mContext;

    private LayoutInflater layoutInflater;

    private MyViewPager itemViewPager;

    private View viewMain;

    private View viewSlide;

    private TextView cancel;

    private TextView delete, block;

    TextView itemName, showResult;

    int triedOnce;

    private ArrayList<View> views;

    private PagerAdapter pagerAdapter;

    private ArrayList<String> mList;

    public static final String API_KEY = "MYAPIKEY";

    public MainListAdapter(Context context, ArrayList<String> list) {
        mContext = context;

        layoutInflater = LayoutInflater.from(mContext);
        mList = list;
    }

    @Override
    public int getCount() {
        return mList != null ? mList.size() : 0;
    }

    @Override
    public Object getItem(int position) {
        return mList != null ? mList.get(position) : null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.listview_item, null);
        }

        if(position%2 == 0){
            convertView.setBackgroundResource(R.drawable.lis_bg);
        }else if(position%2 == 1){
            convertView.setBackgroundResource(R.drawable.ls_eppadi_bg);
        }

        viewMain = layoutInflater.inflate(R.layout.listview_item_main, null);
        viewSlide = layoutInflater.inflate(R.layout.listview_item_slide, null);

        cancel = (TextView)viewSlide.findViewById(R.id.tv_menu_cancel);
        delete = (TextView)viewSlide.findViewById(R.id.tv_menu_delete);
        block = (TextView) viewSlide.findViewById(R.id.tv_menu_block);

        cancel.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    //perform cancel
                }
            });

        delete.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    //perform delete
                }
            });

        block.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    //perform block
                }
            });

        views = new ArrayList<View>();
        views.add(viewMain);
        views.add(viewSlide);

        itemViewPager = (MyViewPager)convertView.findViewById(R.id.vp_list_item);
        itemViewPager.setSelfIndex(position);
        pagerAdapter = new PagerAdapter() {

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                ((MyViewPager)container).removeView(views.get(position));
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                ((MyViewPager)container).addView(views.get(position));
                return views.get(position);
            }

            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                return arg0 == arg1;
            }

            @Override
            public int getCount() {
                return views.size();
            }
        };

        fillItemData(convertView, position, viewMain);
        itemViewPager.setAdapter(pagerAdapter);
        itemViewPager.setCurrentItem(0);
        return convertView;
    }


    //this is where the textview's are initialised
    private void fillItemData(View convertView, final int position, View viewMain) {
        int[] colorCollection = {
            R.color.green, R.color.royalblue, R.color.violet
        };

        for (int i = 0; i < colorCollection.length; i++) {
            colorCollection[i] = mContext.getResources().getColor(colorCollection[i]);
        }

        int currColor = colorCollection[position % colorCollection.length];

        itemName = (TextView)viewMain.findViewById(R.id.tv_item_name);
        showResult = (TextView)viewMain.findViewById(R.id.tv_show);

        itemName.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {

                    new PushTask().execute(position);
                    triedOnce = 0;

                }
        });

        itemName.setBackgroundColor(currColor);
        showResult.setBackgroundColor(currColor);

        itemName.setText(mList.get(position));
    }

    class PushTask extends AsyncTask<Integer, Integer, Integer> {


        @Override
        protected void onPreExecute() {
            itemName.setVisibility(View.GONE);
            showResult.setVisibility(View.VISIBLE);
            //set text here based on the position
            showResult.setText("SENDING");
        }

        @Override
        protected Integer doInBackground(Integer... position) {
            int post = position[0];
            int respCode = 0;

            //perform my network operations

            return respCode;
        }

        @Override
        protected void onPostExecute(Integer response) {
            switch(response) {
                case 1:
                    //set text here
                    showResult.setText("SENT");
                    Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                            showResult.setVisibility(View.GONE);
                            itemName.setVisibility(View.VISIBLE);
                            }
                            }, 2000);
                    break;
                case 2:
                    //set text here
                    showResult.setText("PLEASE WAIT!");
                    handler = new Handler();
                    handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                            showResult.setVisibility(View.GONE);
                            itemName.setVisibility(View.VISIBLE);
                            }
                            }, 2000);
                    break;
                case 3:
                    //set text here
                    showResult.setText("FAILED!");
                    handler = new Handler();
                    handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                            showResult.setVisibility(View.GONE);
                            itemName.setVisibility(View.VISIBLE);
                            }
                            }, 2000);
                    break;
                case 4:
                    //set text here
                    showResult.setText("FAILED!");
                    handler = new Handler();
                    handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                            showResult.setVisibility(View.GONE);
                            itemName.setVisibility(View.VISIBLE);
                            }
                            }, 2000);
                    break;
                default:
                    break;
            }

        }
    }
}

现在我需要基于位置的用户点击到哪里修改 ITEMNAME showResult 的文字。在 itemName.setOnClickListener 有,我会改变这些textViews的文本AsyncTask的。
目前,它的变化对于ListView的最后一行。

Now I need to change the itemName and showResult's text based on the position where the user clicks. The itemName.setOnClickListener has the AsyncTask where I will changing the text of these textViews. Currently it changes for the last row of the listView.

我如何改变它选择的位置。

How do I change it for the position selected.

先谢谢了。

推荐答案

创建模型(POJO)类第一
与你的两个字符串和一个布尔值,称呼其为器isChecked
添加getter和setter它

create a model(POJO) class first with your two strings and one boolean value call it as isChecked add getters and setters to it

设定值(列表数据)添加到您的ArrayList,并保持setIsChecked值为false首次。像这样

set values(list data) to your arraylist and keep setIsChecked value to false for the first time. like this

ArrayList<model> list = new ArrayList<model>();
list.add(new model("string1","string2",false);
list.add(new model("string11","string22",false);

现在onItemClickListener使用这样的循环

now onItemClickListener use for loop like this

for(int i = 0 ; i < list.size; i++){
list.get(i).setIsChecked(false);
}
list.get(itemClickedPosition).setIsChecked(true);
youradapter.notifyDataSetChanged();

后,现在来到了适配器类,你可以设置TextView的选择,你想要做这样的

after that now come to the adapter class where you can set the selected textview as you want do like this

在getView方法做到这一点。

in getView method do this

if(list.get(position).getIsChecked()){
change your textview
}else{
leave as it is
}

做让我知道,如果它可以帮助你。

done let me know if it helps you

这篇关于在一个ListView内的特定位置设置文本的TextView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆