2014-02-05 2 views
0

Я установил прослушиватель событий (onclick) для списка, но он не стреляет. Ниже мой код. Я поместил запись logcat в качестве теста. Но запись в журнале не печатается, и новая активность не запускается.Listview onItemClick Событие не срабатывает

public class GetTenantList extends Activity implements OnItemClickListener { 
    private static String DB_NAME="meterapp.sqlite"; 
    DatabaseHelperClass db= new DatabaseHelperClass(this,DB_NAME);  
    allTenants individualreadings; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tenants);   
     allTenants individualreadings= new allTenants(this); 
     ListView listview =(ListView)findViewById(R.id.tenants);    
     listview.setBackgroundColor(color.holo_orange_dark); 
     listview.setAdapter(individualreadings);   
     listview.setOnItemClickListener(this) ;   

    } 

    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 



    @Override 
     protected void onPause() { 

     db.close(); 
     super.onPause(); 
     } 
    @Override 
     protected void onDestroy(){ 
      db.close(); 
      super.onDestroy(); 
      } 
    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     db.close(); 
     super.onStop(); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long index) { 
     Intent intent = new Intent(this,EditTenants.class); 
     Tenants tenant=(Tenants)individualreadings.getItem(position); 
     String tenantid= Integer.toString(tenant.get_id()); 
     Log.e("Testing Intent Filter", tenantid); 
     intent.putExtra("id", tenantid); 
     startActivity(intent); 

    } 



} 

Любые причины, по которым он не отвечает?

Ronald

У меня есть два варианта предложений кода

Version 1

package com.example.metermanager; 

import meter.manager.helper.DatabaseHelperClass; 
import meters.model.Tenants; 
import android.R.color; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 

public class GetTenantList extends Activity { 
    private static String DB_NAME="meterapp.sqlite"; 
    DatabaseHelperClass db= new DatabaseHelperClass(this,DB_NAME);  
    allTenants individualreadings; 
    ListView listview; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tenants);   
     final allTenants individualreadings= new allTenants(this); 
     listview =(ListView)findViewById(R.id.tenants);  
     listview.setAdapter(individualreadings);   
     listview.setOnItemClickListener(new OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View view, int position, long id) 
      { 
       //whatever code you wish to invoke, in this case 
       Intent intent = new Intent(getApplicationContext(),EditTenants.class); 
       Tenants tenant=(Tenants)individualreadings.getItem(position); 
       String tenantid= Integer.toString(tenant.get_id()); 
       Log.e("Testing Intent Filter", tenantid); 
       intent.putExtra("id", tenantid); 
       startActivity(intent); 
      } 
     }); 


      } 

    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 



    @Override 
     protected void onPause() { 

     db.close(); 
     super.onPause(); 
     } 
    @Override 
     protected void onDestroy(){ 
      db.close(); 
      super.onDestroy(); 
      } 
    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     db.close(); 
     super.onStop(); 
    } 










} 

Версия 2:

я. Скопированный неправильный код. Не спасал!

Оба отказались. Версия 2;

package com.example.metermanager; 

import meter.manager.helper.DatabaseHelperClass; 
import meters.model.Tenants; 
import android.R.color; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 

public class GetTenantList extends Activity implements OnItemClickListener { 
    private static String DB_NAME="meterapp.sqlite"; 
    DatabaseHelperClass db= new DatabaseHelperClass(this,DB_NAME);  
    allTenants individualreadings; 
    ListView listview; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tenants);   
     final allTenants individualreadings= new allTenants(this); 
     listview =(ListView)findViewById(R.id.tenants);  
     listview.setAdapter(individualreadings);   
     listview.setOnItemClickListener(this);  



      } 

    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 



    @Override 
     protected void onPause() { 

     db.close(); 
     super.onPause(); 
     } 
    @Override 
     protected void onDestroy(){ 
      db.close(); 
      super.onDestroy(); 
      } 
    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     db.close(); 
     super.onStop(); 
    } 


    @Override 
    public void onItemClick(AdapterView<?> arg0, View view, int position, long id) 
    { 
      //whatever code you wish to invoke, in this case 
     Intent intent = new Intent(getApplicationContext(),EditTenants.class); 
     Tenants tenant=(Tenants)individualreadings.getItem(position); 
     String tenantid= Integer.toString(tenant.get_id()); 
     Log.e("Testing Intent Filter", tenantid); 
     intent.putExtra("id", tenantid); 
     startActivity(intent); 
    } 







} 

Вот код для всех классов Tenants.

package com.example.metermanager; 

import java.text.DecimalFormat; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Locale; 

import meter.manager.helper.DatabaseHelperClass; 
import meters.model.Tenants; 
import meters.model.VMeterReadings; 
import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.CheckBox; 
import android.widget.TextView; 

public class allTenants extends BaseAdapter { 

    @SuppressWarnings("unused") 
    private Context context; 
    DatabaseHelperClass db; 
    private static String DB_NAME="meterapp.sqlite";  
    private List<Tenants> readings =new ArrayList<Tenants>(); 
    DecimalFormat df = new DecimalFormat("#,###,###,###"); 
    SimpleDateFormat fm =new SimpleDateFormat("dd-MM-yyyy",Locale.UK); 
public allTenants(Context context1) {  
     this.context=context1; 
     DatabaseHelperClass db= new DatabaseHelperClass(context1,DB_NAME); 
     readings=db.GetAllTenants(); 
     //close it 
     db.close(); 
    } 


    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return readings.size(); 
    } 

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

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


    @Override 
    public View getView(int arg0, View view, ViewGroup parent) { 
     try{   
     if (view ==null){ 
      LayoutInflater inflater= 
        LayoutInflater.from(parent.getContext()); 
        view =inflater.inflate(R.layout.tenants_listview,parent,false); 

     } 
     Tenants reading =readings.get(arg0);   
     TextView tenantTextView =(TextView) 
       view.findViewById(R.id.textView9); 

     tenantTextView.setText(reading.getFirstName()); 

     TextView surnameTextView =(TextView) 
       view.findViewById(R.id.textView10);  
     surnameTextView .setText(reading.getSurName()); 
     TextView othernamesTextView =(TextView) 
       view.findViewById(R.id.textView11);  
     othernamesTextView .setText(reading.getOtherNames()); 

     TextView mobile1 =(TextView) 
        view.findViewById(R.id.textView12);  
     mobile1.setText(reading.getMobile1()); 

     TextView mobile2TextView =(TextView) 
        view.findViewById(R.id.textView13);  
     mobile2TextView.setText(reading.getMobile2()); 

      TextView dateaddedTextView =(TextView) 
         view.findViewById(R.id.textView14);  
      dateaddedTextView.setText(fm.format((reading.getDateAdded())));  

       CheckBox inactiveCheckbox =(CheckBox) 
          view.findViewById(R.id.chkinactive);   
       inactiveCheckbox.setChecked(reading.getInActive()); 
        TextView inactivedateTextView =(TextView) 
           view.findViewById(R.id.textView16);  
        inactivedateTextView.setText(fm.format(reading.getDateInActive())); 

        TextView tenantid =(TextView) 
          view.findViewById(R.id.textView17); 
        String test= Integer.toString(reading.get_id()); 
        tenantid.setText(test); 


     }catch(Exception e) 
     { 
      Log.e("Error loading data in All Tenants listbox",e.toString()); 
     } 
     return view; 
    } 

} 
+0

Что такое тетанец ... – Ranjit

+0

Можете ли вы отладить приложение? Возможно, это дает вам ошибку в некоторой строке перед setOnItemClickListener – Giacomoni

+0

Да. Я пытался. Все остальное работает так, как я ожидаю. только это событие не стреляет! – user3079559

ответ

0

Вы используете только this в качестве контекста .... изменить его GetTenantList.this в вашем onItemClick. Кроме того, вы можете изменить Намерение параметры:

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long index) { 
    Intent intent = new Intent(GetTenantList.this,EditTenants.class); 
    Tenants tenant=(Tenants)individualreadings.getItem(position); 
    String tenantid= Integer.toString(tenant.get_id()); 
    Log.e("Testing Intent Filter", tenantid); 
    Bundle params = new Bundle(); 
    params.putString("id", tenantid); 
    intent.putExtras(params); 
    startActivity(intent); 

} 
+0

Здравствуйте. Пробовала, но все та же проблема. – user3079559

+0

Я отредактировал мой ответ – Giacomoni

+0

Все еще не повезло !. Не работает! – user3079559

0

Проверьте, как это:

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Intent intent = new Intent(GetTenantList.this,EditTenants.class); 
    Tenants tenant=(Tenants)individualreadings.getItem(position); 
    String tenantid= Integer.toString(tenant.get_id()); 
    Log.e("Testing Intent Filter", tenantid); 
    intent.putExtra("id", tenantid); 
    startActivity(intent); 

} 
0

Я думаю, что вы, возможно, неправильно в setOnItemClickListener() документации/примеры. Попробуйте сделать это следующим образом:

listview.setOnItemClickListener(new OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position, long id) 
     { 
      //whatever code you wish to invoke, in this case 
      Intent intent = new Intent(getApplicationContext(),EditTenants.class); 
      Tenants tenant=(Tenants)individualreadings.getItem(position); 
      String tenantid= Integer.toString(tenant.get_id()); 
      Log.e("Testing Intent Filter", tenantid); 
      intent.putExtra("id", tenantid); 
      startActivity(intent); 
     } 
    } 

Не забудьте правильно импортировать слушателя!

+0

Привет. Это не соответствует «новому намерению (это, EditTenants.class)»; подчеркнуты. – user3079559

+0

С ошибкой «Конструктор ...» не определено. – user3079559

+0

Действительно, моя ошибка здесь виновата. Замените 'this' на' getApplicationContext() '. Редактирование ответа тоже. – aBrav

0

Попробуйте использовать ListView в качестве переменной-члена класса.

+0

Пробовал. Тем не менее событие не срабатывает. я даже поставил точку останова. Когда я отлаживаю, отладка не активируется, потому что событие не срабатывает. – user3079559

+0

Возможно, адаптер AllTenants Adapter уже реализует OnClickListener? – tweetjay

+0

Позвольте добавить код как отредактировав мой вопрос. – user3079559

Смежные вопросы