如何通过单击listview项

时间:2017-05-18 10:23:00

标签: android

我有一个列表视图,其中有一个文本视图和复选框。如果我第一次点击listview项目,则会显示该复选框。如果我再次点击同一个列表项,则复选框将消失。

怎么做?

源代码:

MainActivity:

public class MainActivity extends Activity {

    ArrayList<String> numbers = new ArrayList<String>(100);
    ListView lv_numbers;
    TextView set_TxtView;
    int count_new=1,count_changed=1;

    public static boolean firstTime=false,firstTime_changed=false;

    Canvas canvas;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.numbers_layout);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            getWindow().setStatusBarColor(getResources().getColor(R.color.blue));
        }
        lv_numbers=(ListView)findViewById(R.id.lv_numbers);
        set_TxtView=(TextView)findViewById(R.id.set_TxtView);

        for (int i = 1; i <= 50; i++)
        {
            if(i%2==0) {
                numbers.add("Neelima Maddala");
            }
            else{
                numbers.add("Neelu Neelima");
            }
        }
        Log.e("num","num"+numbers);

        final NumbersAdapter num_adapter = new NumbersAdapter(MainActivity.this,numbers);
        lv_numbers.setAdapter(num_adapter);

        lv_numbers.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                String selectedFromList = (String) lv_numbers.getItemAtPosition(position);
                set_TxtView.setText(selectedFromList);
                int cntChoice = lv_numbers.getCount();
                Log.e("hi", "hi" + cntChoice);

            }
        });

    }
}

适配器:

public class NumbersAdapter extends BaseAdapter {

    Activity context;
    ArrayList<String> numbers_array = new ArrayList<>();
    ViewHolder holder;
    public static boolean firstTime_new=false;
    boolean check;


    public NumbersAdapter(Activity activity, ArrayList<String> numbers_array) {
        this.context = activity;
        this.numbers_array= numbers_array;

    }

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

    @Override
    public Object getItem(int position) {
        return numbers_array.get(position);
    }

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {


        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.number_adapter, null);
            holder = new ViewHolder();
            holder.ll_base=(RelativeLayout)convertView.findViewById(R.id.ll_base);
            holder.number = (TextView) convertView.findViewById(R.id.textView_number);
            holder.checkbox= (CheckBox) convertView.findViewById(R.id.checkbox);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        String numb=String.valueOf(numbers_array.get(position));
        holder.number.setText(numb);
        notifyDataSetChanged();
        return convertView;
    }

    static class ViewHolder {

        TextView number;
        RelativeLayout ll_base;
        CheckBox checkbox;
    }
}

2 个答案:

答案 0 :(得分:2)

像这样修改你的getView方法:

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {


        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.number_adapter, null);
            holder = new ViewHolder();
            holder.ll_base=(RelativeLayout)convertView.findViewById(R.id.ll_base);
            holder.number = (TextView) convertView.findViewById(R.id.textView_number);
            holder.checkbox= (CheckBox) convertView.findViewById(R.id.checkbox);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        String numb=String.valueOf(numbers_array.get(position));
        holder.ll_base.setTag(false);
        holder.number.setText(numb);
        holder.checkbox.setVisibility(View.GONE);
        notifyDataSetChanged();
        holder.ll_base.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if( ((Boolean)holder.ll_base.getTag()).booleanValue()== false){
               holder.checkbox.setVisibility(View.VISIBILE);
                holder.ll_base.setTag(true)
            }else{
          holder.checkbox.setVisibility(View.GONE);
                holder.ll_base.setTag(false);
         }
        }
    });
        return convertView;
    }

请忽略错别字。

答案 1 :(得分:1)

请尝试以下列表项目代码,

lv_numbers.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            String selectedFromList = (String) lv_numbers.getItemAtPosition(position);
            set_TxtView.setText(selectedFromList);
            int cntChoice = lv_numbers.getCount();
            Log.e("hi", "hi" + cntChoice);

            CheckBox selectedCheckBox = (CheckBox) view.findViewById(R.id.checkbox);

           if(selectedCheckBox.getVisibility() == View.GONE)
           {
               selectedCheckBox.setVisibility(View.VISIBLE);
           }
           else
           {
              selectedCheckBox.setVisibility(View.GONE);
           }
        }
    });
相关问题