有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用基本适配器单击每个位置

我使用的是基本适配器,我有一个列表,其中包含文本视图的列表(表示左侧发送的项目,下面是右侧接收的项目),我想单击列表中的每个位置以执行回复消息

请建议我如何执行单击列表项的功能

下面是我正在使用的代码

类MessageAdapter扩展了BaseAdapter{

     ViewHolder viewHolder;
     LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);

     public int getCount() {
            // TODO Auto-generated method stub
            return Constant_Variables.Sms_Status_list.size();
        }

     public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

     @Override
     public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }



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

         if (convertView == null) {
             convertView = inflater.inflate(R.layout.messagelist_row, null);

             viewHolder=new ViewHolder();

             viewHolder.sms_from_row=(TextView)convertView.findViewById(R.id.sms_from_txtview);
             viewHolder.sms_to_row=(TextView)convertView.findViewById(R.id.sms_sendto_txtview);

         }
         else
         {
             viewHolder = (ViewHolder) convertView.getTag();
         }


         viewHolder.sms_from_row.setVisibility(View.VISIBLE);
         viewHolder.sms_to_row.setVisibility(View.VISIBLE);


         if(Constant_Variables.Sms_Status_list.get(position).equalsIgnoreCase(Twilioresponse_Utils.sms_sent))
         {
             viewHolder.sms_from_row.setVisibility(View.GONE);
             viewHolder.sms_to_row.setText("Sent: "+Constant_Variables.Sms_from_list.get(position));

         }
         else if(Constant_Variables.Sms_Status_list.get(position).equalsIgnoreCase(Twilioresponse_Utils.sms_received))
         {
             viewHolder.sms_to_row.setVisibility(View.GONE);
             viewHolder.sms_from_row.setText("Received: "+Constant_Variables.Sms_to_list.get(position));
         }
         else
         {
             viewHolder.sms_from_row.setText("Message in queued.");
             viewHolder.sms_to_row.setVisibility(View.VISIBLE);
         }


         convertView.setTag(viewHolder);


         return convertView;
     }

     protected void onListItemClick(ListView l, View v, final int position, long id) {

         if(l.callOnClick()== true)
         {
             Log.i("the Item clicked is at position : ", ""+ position);
         }

         else
         {
             Log.i("the Item not clicked is at position : ","the Item not clicked is at position" );
         }
     }
 }

下面是我正在使用的XML代码

<RelativeLayout 
    xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    安卓:layout_width="wrap_content"
    安卓:layout_height="wrap_content"
    >

    <TextView
        安卓:id="@+id/sms_from_txtview"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:padding="12dp"
        安卓:layout_alignParentRight="true"
        安卓:background="@drawable/blue"
        安卓:layout_alignParentTop="true"
        安卓:text="From" />

    <TextView
        安卓:id="@+id/sms_sendto_txtview"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:padding="12dp"
        安卓:background="@drawable/red"
        安卓:layout_alignParentLeft="true"
        安卓:layout_alignParentTop="true"
        安卓:text="To" />
</RelativeLayout >

问候 阿姆林德辛格


共 (5) 个答案

  1. # 1 楼答案

    android中有一个监听器,你可以使用它

    ListView listview = (ListView)findViewById(R.id.yourlist);
    listview.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // @todo
        }
    });
    

    对于列表项中的单个视图,始终可以在getView方法中添加click listener

  2. # 2 楼答案

    单击列表时
    When Click on List

    单击删除图标 when click on delete icon

    以下是您可以参考的代码:

        public class CaseAdapter extends BaseAdapter{
    
            Context context;
            ArrayList<PojoClass> list;
            LayoutInflater inflater;
    
            public CaseAdapter(Context context,ArrayList<PojoClass> list)
            {
                this.context=context;
                this.list=list;
                inflater=(LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
            }
    
            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return list.size();
            }
    
            @Override
            public Object getItem(int position) {
                // TODO Auto-generated method stub
                return position;
            }
    
            @Override
            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return position;
            }
    
            @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                View row = convertView;
                 ViewHolder holder = null;
    
                if(row == null)
                {
    
                    row = inflater.inflate(R.layout.activity_home_screen, parent,false);            
                    holder = new ViewHolder(row);
                    row.setTag(holder);
    
                }
                else
                {
                    holder = (ViewHolder) row.getTag();
                }
                holder.caseNumber.setText(list.get(position).getCaseNo());
                holder.state.setText(list.get(position).getState());
                holder.date.setText(list.get(position).getDate());
    
                row.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                         Toast.makeText(context, "record clicked!", Toast.LENGTH_LONG).show();
    
                    }
                });
    
                holder.delete.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        v=(View) v.getParent();//utilizing the View object...or we can use new view object
                        //View view=(View)v.getParent();//this one also we can use...but instead of v object you need to use view object;
    
                        TextView number=(TextView)v.findViewById(R.id.textView_case_number);
                        InfoDb db=new InfoDb(context);//using for remove record from database
                        db.open();
    
                        if(db.removeRecord(number.getText().toString()))
                        {
    list.remove(position);
                      Toast.makeText(context, "Record Deleted!", Toast.LENGTH_LONG).show();
                      CaseAdapter.this.notifyDataSetChanged();
    
                        }else
                             Toast.makeText(context, "Record not Deleted!", Toast.LENGTH_LONG).show();
    
                        db.close();
                    }
                });
    
                return row;
            }
    
    
            public class ViewHolder{
    
                TextView state,caseNumber,date;
                ImageView delete;
    
                public ViewHolder(View v){
                    state=(TextView)v.findViewById(R.id.textView_State);
                    caseNumber=(TextView)v.findViewById(R.id.textView_case_number);
                    date=(TextView)v.findViewById(R.id.textView_date);
                    delete=(ImageView)v.findViewById(R.id.ImageView_Delete);
    
    
                }
    
    
            }
    
        }
    
  3. # 3 楼答案

    在项目上写入单击文本视图

       @Override
     public View getView(final int position, View convertView, ViewGroup parent) {
    
         if (convertView == null) {
             convertView = inflater.inflate(R.layout.messagelist_row, null);
    
             viewHolder=new ViewHolder();
    
             viewHolder.sms_from_row=(TextView)convertView.findViewById(R.id.sms_from_txtview);
             viewHolder.sms_to_row=(TextView)convertView.findViewById(R.id.sms_sendto_txtview);
    
    viewHolder.sms_from_row.setOnClickListener(new View.OnClickListener() {
    
                            @Override
                            public void onClick(View v) {
    
                            }
                        });
         }
         else
         {
             viewHolder = (ViewHolder) convertView.getTag();
         }
    
    
         viewHolder.sms_from_row.setVisibility(View.VISIBLE);
         viewHolder.sms_to_row.setVisibility(View.VISIBLE);
    
    
         if(Constant_Variables.Sms_Status_list.get(position).equalsIgnoreCase(Twilioresponse_Utils.sms_sent))
         {
             viewHolder.sms_from_row.setVisibility(View.GONE);
             viewHolder.sms_to_row.setText("Sent: "+Constant_Variables.Sms_from_list.get(position));
    
         }
         else if(Constant_Variables.Sms_Status_list.get(position).equalsIgnoreCase(Twilioresponse_Utils.sms_received))
         {
             viewHolder.sms_to_row.setVisibility(View.GONE);
             viewHolder.sms_from_row.setText("Received: "+Constant_Variables.Sms_to_list.get(position));
         }
         else
         {
             viewHolder.sms_from_row.setText("Message in queued.");
             viewHolder.sms_to_row.setVisibility(View.VISIBLE);
         }
    
    
         convertView.setTag(viewHolder);
    
    
         return convertView;
     }
    
  4. # 4 楼答案

    初始化该视图时,为这两个视图实现click listener

    viewHolder.sms_from_row.setOnClickListener(new OnClickListener(){
        public void onClick(View view){
            // Todo thing
        }
    });
    viewHolder.sms_to_row.setOnClickListener(new OnClickListener(){
        public void onClick(View view){
            // Todo thing
        }
    });
    
  5. # 5 楼答案

    您的代码是正确的,只需在下面添加click listener

     viewHolder.sms_from_row=(TextView)convertView.findViewById(R.id.sms_from_txtview);
     viewHolder.sms_to_row=(TextView)convertView.findViewById(R.id.sms_sendto_txtview);
    

    在这个添加下面,像这样点击监听器

    viewHolder.sms_from_row.setOnClickListener(new OnClickListener() {
    
                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
    
                        }
                    });
    
        viewHolder.sms_to_row.setOnClickListener(new OnClickListener() {
    
                            @Override
                            public void onClick(View v) {
                                // TODO Auto-generated method stub
    
                            }
                        });
    

    希望对你有帮助

    谢谢