ArrayAdapter setOnClickListener funktioniert nicht

  • 4 Antworten
  • Letztes Antwortdatum
T

theAydinator

Neues Mitglied
0
Hallo Forum,

ich habe in mein ArrayAdapter den setOnClickListener eingebaut, jedoch scheint es ein Problem zu haben.

Code:
import java.util.ArrayList;
import java.util.Locale;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
 
public class CustomAdapter extends ArrayAdapter<Bittgebete>{
	
	// Declare Variables
	Context context;
	LayoutInflater inflater;
    private ArrayList<Bittgebete> bittgebete;
	private ArrayList<Bittgebete> arraylist;
 
    public CustomAdapter(Context context, int textViewResourceId, ArrayList<Bittgebete> bittgebete) {
        super(context, textViewResourceId, bittgebete);
        this.bittgebete = bittgebete;
        this.context = context;
        
    	inflater = LayoutInflater.from(context);
        
        this.arraylist = new ArrayList<Bittgebete>();
		this.arraylist.addAll(bittgebete);
    }
 
    public static class ViewHolder{
        TextView id;
        TextView name;
        TextView ar;
        TextView latein;
        TextView de;
        TextView quelle;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ViewHolder holder;
        if (v == null) {
            //LayoutInflater vi = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.list_item, null);
            holder = new ViewHolder();
            holder.id = (TextView) v.findViewById(R.id.id);
            holder.name = (TextView) v.findViewById(R.id.name);
            holder.ar = (TextView) v.findViewById(R.id.ar);
            holder.latein = (TextView) v.findViewById(R.id.latein);
            holder.de = (TextView) v.findViewById(R.id.de);
            holder.quelle = (TextView) v.findViewById(R.id.quelle);
            v.setTag(holder);
        }
        else
            holder=(ViewHolder)v.getTag();
 
        final Bittgebete custom = bittgebete.get(position);
        if (custom != null) {
            holder.id.setText(custom.getId());
            holder.name.setText(custom.getName());
            holder.ar.setText(custom.getAr());
            holder.latein.setText(custom.getLatein());
            holder.de.setText(custom.getDe());
            holder.quelle.setText(custom.getQuelle());
        }

        // Listen for ListView Item Click
 		v.setOnClickListener(new OnClickListener() {
 			
 			@Override
 			public void onClick(View arg0) {
 				Intent intent = new Intent(context, SingleItemView.class);

 				intent.putExtra("id",(custom.getId()));

 				intent.putExtra("name",(custom.getName()));

 				intent.putExtra("ar",(custom.getAr()));

 				intent.putExtra("latein",(custom.getLatein()));

 				intent.putExtra("de",(custom.getDe()));

 				intent.putExtra("quelle",(custom.getQuelle()));

 				// Start SingleItemView Class
 				context.startActivity(intent);
 			}
 		});
        
        return v;
    }
    

	// Filter Class
	public void filter(String charText) {
		charText = charText.toLowerCase(Locale.getDefault());
		bittgebete.clear();
		if (charText.length() == 0) {
			bittgebete.addAll(arraylist);
		} else {
			for (Bittgebete wp : arraylist) {
				if (wp.getName().toLowerCase(Locale.getDefault())
						.contains(charText)) {
					bittgebete.add(wp);
				}
			}
		}
		notifyDataSetChanged();
	}
 
}

Es stürzt beim Betätigen eines Items ab.:confused2:

Könnte jemand helfen?

Danke!
Aydin

Der ursprüngliche Beitrag von 12:43 Uhr wurde um 12:47 Uhr ergänzt:

Code:
package de.jfd.hisnulmuslim;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
import android.widget.TextView;

public class SingleItemView extends Activity {
	
	// Declare Variables 
	String id;
	String name;
	String ar;
	String latein;
	String de;
	String quelle;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
		
		// Get the view from singleitemview.xml
		setContentView(R.layout.singleitemview);
		
		getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
		
		
		Intent i = getIntent();
		
		id = i.getStringExtra("id");

		name = i.getStringExtra("name");

		ar = i.getStringExtra("ar");

		latein = i.getStringExtra("latein");

		de = i.getStringExtra("de");

		quelle = i.getStringExtra("quelle");

		TextView txtname = (TextView) findViewById(R.id.name);
		TextView txtar = (TextView) findViewById(R.id.ar);
		TextView txtlatein = (TextView) findViewById(R.id.latein);
		TextView txtde = (TextView) findViewById(R.id.translation);
		TextView txtquelle = (TextView) findViewById(R.id.quelle);
		
		// Set results to the TextViews
		txtname.setText(name);
		txtar.setText(ar);
		txtlatein.setText(latein);
		txtde.setText(de);
		txtquelle.setText("Quelle: " + quelle);
	}

}
 
Code:
package de.jfd.hisnulmuslim;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

  ListView listView;
  private CustomAdapter adapter;
  EditText editsearch;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    
    setContentView(R.layout.main);
	
	getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);

    listView = (ListView) findViewById(R.id.list);

    ArrayList<Bittgebete> bittgebete = null;
    
	XMLPullParserHandler parser = new XMLPullParserHandler();
	
	try {
		bittgebete = parser.parse(getAssets().open("hisnulmuslim.xml"));
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	//ArrayAdapter<Bittgebete> adapter =  new ArrayAdapter<Bittgebete>(this,R.layout.list_item, bittgebete);
	
	adapter = new CustomAdapter(MainActivity.this,
            R.id.list,
            bittgebete);
	
	listView.setAdapter(adapter);
	
	
	listView.setOnItemClickListener(new OnItemClickListener() {
		public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		    // When clicked, show a toast with the TextView text
		    Bittgebete bittgebete = (Bittgebete) parent.getItemAtPosition(position);
		    
		    Toast.makeText(getApplicationContext(), bittgebete.getAr(), Toast.LENGTH_LONG).show();
		    

			/*Intent intent = new Intent(MainActivity.this, SingleItemView.class);

			intent.putExtra("name",(bittgebete.getName()));

			// Start SingleItemView Class
			startActivity(intent);*/
		    
		}
	});

  }
  
}

Der Toast wird ausgeführt, jedoch die kommentierte Zeile verursachen Fehler.
 
Aktuell würde ich sagen, gerade wegen dem auskommentieren hast du Fehler.

adapter = new Custom.........

Du definierst nirgendwo was Adapter ist
ArrayAdapter<Bittgebete> adapter = new CustomAdapter.....
So müsste das aussehen.

Beim Intent unten ähnlich.
Wenn du die Zeile wo du das Intent erstellst rausnimmst gibts das "intent" in der nächsten Zeile doch gar nicht.
 
amfa schrieb:
Aktuell würde ich sagen, gerade wegen dem auskommentieren hast du Fehler.

adapter = new Custom.........

Du definierst nirgendwo was Adapter ist
ArrayAdapter<Bittgebete> adapter = new CustomAdapter.....
So müsste das aussehen.

Beim Intent unten ähnlich.
Wenn du die Zeile wo du das Intent erstellst rausnimmst gibts das "intent" in der nächsten Zeile doch gar nicht.

Danke erstmal für Ihre Antwort, jedoch kann ich leider Ihnen nicht ganz folgen.

Gleich nachdem ich die Klasse erstelle, definiere ich adapter:
Code:
private CustomAdapter adapter;

Würden Sie mir bitte nochmal erklären, was hier falsch ist:
Code:
listView.setOnItemClickListener(new OnItemClickListener() {
		public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		    // When clicked, show a toast with the TextView text
		    Bittgebete bittgebete = (Bittgebete) parent.getItemAtPosition(position);
		    
		    Toast.makeText(getApplicationContext(), bittgebete.getAr(), Toast.LENGTH_LONG).show();
		    

			Intent intent = new Intent(getApplicationContext(), SingleItemView.class);

			intent.putExtra("name",bittgebete.getName());

			// Start SingleItemView Class
			startActivity(intent);
		    
		}
	});

MainActivity gesamt:
Code:
package de.jfd.hisnulmuslim;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

  ListView listView;
  private CustomAdapter adapter;
  EditText editsearch;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    
    setContentView(R.layout.main);
	
	getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);

    listView = (ListView) findViewById(R.id.list);

    ArrayList<Bittgebete> bittgebete = null;
    
	XMLPullParserHandler parser = new XMLPullParserHandler();
	
	try {
		bittgebete = parser.parse(getAssets().open("hisnulmuslim.xml"));
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	//ArrayAdapter<Bittgebete> adapter =  new ArrayAdapter<Bittgebete>(this,R.layout.list_item, bittgebete);
	
	adapter = new CustomAdapter(MainActivity.this,
            R.id.list,
            bittgebete);
	
	listView.setAdapter(adapter);
	
	
	listView.setOnItemClickListener(new OnItemClickListener() {
		public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		    // When clicked, show a toast with the TextView text
		    Bittgebete bittgebete = (Bittgebete) parent.getItemAtPosition(position);
		    
		    Toast.makeText(getApplicationContext(), bittgebete.getAr(), Toast.LENGTH_LONG).show();
		    

			Intent intent = new Intent(getApplicationContext(), SingleItemView.class);

			intent.putExtra("name",bittgebete.getName());

			// Start SingleItemView Class
			startActivity(intent);
		    
		}
	});


  }
  
}


Der ursprüngliche Beitrag von 16:26 Uhr wurde um 16:34 Uhr ergänzt:

FEHLER GEFUNDEN :D

Ich hatte in der Manifest Datei die Activity SingleItemView nicht regestriert gehabt.
Danke trotzdem allen!
 
Ok sehr gut.

Aber beim nächsten mal solltest du auch die passenden Fehlermeldungen mitliefern.

Das du den CustomAdapter weiter oben definierst hab ich übersehen ;)
 

Ähnliche Themen

AnnaBauer21
Antworten
0
Aufrufe
596
AnnaBauer21
AnnaBauer21
AnnaBauer21
Antworten
6
Aufrufe
1.163
AnnaBauer21
AnnaBauer21
Zurück
Oben Unten