2017-09-08 3 views
0

Ich habe eine benutzerdefinierte Listenansicht erstellt und hier ist der Code. Wenn ich OnClickListener zur Ansicht hinzufüge, wird der Toast nur für ImageView erstellt. Wenn ich versuche, denselben Listener zu anderen Ansichten hinzuzufügen (Textansicht), stürzt meine App ab. Meine benutzerdefinierte Listenansicht implementiert ONClickListener Bitte helfen Sie mir dabei.Fehler beim Anwenden desselben onClickListner auf alle Elemente in der benutzerdefinierten Listenansicht [Android]

@Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 


     view = layoutInflater.inflate(R.layout.activity_demo6_1, null); 

     ImageView img = (ImageView) view.findViewById(R.id.vImage); 

     final TextView name = (TextView) view.findViewById(R.id.vName); 
     final TextView write = (TextView) view.findViewById(R.id.vWrite); 
     final TextView date = (TextView) view.findViewById(R.id.vDate); 

     name.setText(articleName[i]); 
     write.setText(articleAuthor[i]); 
     date.setText(articleDate[i]); 

     view.setOnClickListener(this); 

     return view; 
    } 

@Override 
    public void onClick(View view) { 

    Toast.makeText(context, name1.getText() + "\n" + write1.getText() + "\n" + date1.getText() + "" ,Toast.LENGTH_LONG).show(); 

    } 

Antwort

1

Ich sehe, dass Sie ein OnClickListener auf „Ansicht“ hinzufügen, die nicht der richtige Weg sein sollte ein auf Klick Zuhörer zu Ihrer Ansicht Artikel hinzufügen, versuchen Sie stattdessen

@Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 


     view = layoutInflater.inflate(R.layout.activity_demo6_1, null); 

     ImageView img = (ImageView) view.findViewById(R.id.vImage); 

     final TextView name = (TextView) view.findViewById(R.id.vName); 
     final TextView write = (TextView) view.findViewById(R.id.vWrite); 
     final TextView date = (TextView) view.findViewById(R.id.vDate); 

     name.setText(articleName[i]); 
     write.setText(articleAuthor[i]); 
     date.setText(articleDate[i]); 

     name.setOnClickListener(this); 
     write.setOnClickListener(this); 
     date.setOnClickListener(this); 

     return view; 
    } 

@Override 
    public final void onClick(final View v) { 
    switch (v.getId()) { 
     case R.id.vName: 
     nameClick(); // Create corresponding methods for each click, if its the same functionality just use the same method on all switch cases 
     break; 
     case R.id.vWrite: 
     writeClick(); 
     break; 
     case R.id.vDate: 
     dateClick(); 
     break; 
     default: 
     break; 
    } 
    } 

private void nameClick(){ 
    Toast.makeText(context, name1.getText() + "\n" + write1.getText() + "\n" + date1.getText() + "" ,Toast.LENGTH_LONG).show(); 
} 

Hoffe, es hilft

+0

danke für Hilfe – ap14

0

Wenn Sie nur auf Artikel/Ansicht klicken möchten, können Sie verwenden:

listView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    //Your code here 
    } 
}); 

in Ihrem MainActivity/Host Aktivität. Oder wenn Sie auf jede Unteransicht in der Ansicht klicken möchten, folgen Sie @andre answer.

Verwandte Themen