2017-07-13 13 views
0

Mein Code ist, alle persönlichen Daten der Mitarbeiter aufzulisten, und sobald wir auf die Telefonnummer klicken, wird es in der Lage sein, die Nummer zu wählen. Aber, wie man das unclickable TextView in der ListView löst? Ich muss zweimal geklickt werden, um die Zahl .. sucht nach Hilfe dankKlicken Sie nicht auf TextView in der Liste

MainActivity

listView = (ListView) findViewById(R.id.list_view); 
        adapter = new AgentAdapter(this, arrayList); 
        listView.setAdapter(adapter); 

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
         @Override 
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
          final SalesAgent agent = arrayList.get(position); 

          TextView phone_field = (TextView)view.findViewById(R.id.phone); 
          phone_field.setOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            Intent intent = new Intent(Intent.ACTION_DIAL); 
            intent.setData(Uri.parse(agent.getPhone())); 
            startActivity(intent); 
           } 
          }); 
         } 
        }); 

Customized ArrayAdapter

  public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
        View listItemView = convertView; 
        if(listItemView == null){ 
         listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false); 
        } 

        //change background colours 
        listItemView.setBackgroundColor(getContext().getResources().getColor(R.color.colorSkyBlue)); 

        currentAgent = getItem(position); 

        TextView name_field = (TextView) listItemView.findViewById(R.id.name); 
        TextView website_field = (TextView) listItemView.findViewById(R.id.website); 
        final TextView phone_field = (TextView) listItemView.findViewById(R.id.phone); 

        name_field.setText(currentAgent.getName()); 
        website_field.setText(currentAgent.getWebsite()); 
        phone_field.setText(currentAgent.getPhone()); 

        return listItemView; 
       } 

Antwort

0

Sie Textview # OnClickListener innen Adapter # getView setzen sollte zu wählen und nicht in ListView # OnItemClickListener

Gefällt mir:

public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
       View listItemView = convertView; 
       if(listItemView == null){ 
        listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false); 
       } 

       //change background colours 
       listItemView.setBackgroundColor(getContext().getResources().getColor(R.color.colorSkyBlue)); 

       currentAgent = getItem(position); 

       TextView name_field = (TextView) listItemView.findViewById(R.id.name); 
       TextView website_field = (TextView) listItemView.findViewById(R.id.website); 
       final TextView phone_field = (TextView) listItemView.findViewById(R.id.phone); 

       name_field.setText(currentAgent.getName()); 
       website_field.setText(currentAgent.getWebsite()); 
       phone_field.setText(currentAgent.getPhone()); 
       phone_field.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           Intent intent = new Intent(Intent.ACTION_DIAL); 
           intent.setData(Uri.parse(agent.getPhone())); 
           startActivity(intent); 
          } 
         }); 
       return listItemView; 
      } 

EDIT

Sie in Ihrem Konstruktor Adapter Ihre Aktivitätsinstanz für die Verwendung startActivity Methode hinzufügen sollte, so unter der Annahme, "MyActivity" ist Ihr variabile wie diese

myActivity.startActivity(intent); 
+0

Ich habe Problem in startActivity (Absicht) ... – yoyo97

+0

@ my bearbeiten yoyo97 sehen –

+0

Ich habe es schon Dank! – yoyo97

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

    final ViewHolder holder; 

    if (convertView == null) { 

     holder = new ViewHolder(); 

     convertView = inflater.inflate(R.layout. list_item, null); 

     holder.name_field = (TextView) convertView.findViewById(R.id.name); 
     holder.website_field = (TextView) convertView.findViewById(R.id.website); 

     convertView.setTag(holder); 

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

    final CurrentAgent currentAgent = getItem(position); 

    holder.name_field.setText(currentAgent.getName()); 

    holder.name_field.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // DO WHATEVER YOU WANT 
     } 
    }); 
return convertView; 
} 

public class ViewHolder { 

     TextView name_field; 
     TextView website_field; 

} 
0

Sie haben sein sollten Führen Sie einen einfachen Klick durch:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     final SalesAgent agent = arrayList.get(position); 
     Intent intent = new Intent(Intent.ACTION_DIAL); 
     intent.setData(Uri.parse(agent.getPhone())); 
     startActivity(intent); 
     } 
    }); 
} 

Sie müssen click listener von TextView nicht erneut verwenden. Die Position des Artikels in ListView kann von position Parameter in onItemClick Methode abgerufen werden.

+0

Verwenden wir auf diese Weise nur das Element ListView und nicht die TextView der Telefonnummer? – yoyo97

+0

Sie werden alles von diesem Element in der Liste abrufen. –

+0

Eigentlich gibt es einen Link, um eine Absicht an ein Web zu senden, also wenn es die von Ihnen vorgeschlagene Methode verwendet, ist es vielleicht nicht so ratsam? – yoyo97

0

Als Empfehlung, ist es besser recyclerview verwenden

0

Sie müssen einen Hörer in Ihrem Adapter hinzufügen, ich hoffe und sriva mein Beispiel Grüße.

public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
        View listItemView = convertView; 
        if(listItemView == null){ 
         listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false); 
        } 

        //change background colours 
        listItemView.setBackgroundColor(getContext().getResources().getColor(R.color.colorSkyBlue)); 

        currentAgent = getItem(position); 

        TextView name_field = (TextView) listItemView.findViewById(R.id.name); 
        TextView website_field = (TextView) listItemView.findViewById(R.id.website); 
        final TextView phone_field = (TextView) listItemView.findViewById(R.id.phone); 
        //here add listener texview 
        phone_field.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          // your code call phone 
         } 
        }); 

        name_field.setText(currentAgent.getName()); 
        website_field.setText(currentAgent.getWebsite()); 
        phone_field.setText(currentAgent.getPhone()); 

        return listItemView; 
       } 
Verwandte Themen