Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] BASE ADAPTER

Voce está ignorando o mecanismo de reutilização de Views da listview, isso deixa o scroll lento e o consumo de memória potencialmente alto. Pra utilizar corretamente, quando a sua convertView for null vc cria o elemento, e fora do if vc configura o conteúdo do mesmo como o texto, retornando a convertView ao invés de null.

Em quarta-feira, 27 de março de 2013 16h35min00s UTC-3, Kleverso...@gmail.com escreveu:

Mauricio acho que o 'return null', não seria. Porque se eu fizer um extend ListActivity ao inves de extend Activity. Ele funciona e faz o adapter normalmente.


2013/3/27 Mauricio Hiroshi Nagaoka <mhna...@gmail.com>
Não seria o "return null" no final do método getView do seu adapter?

On Wed, Mar 27, 2013 at 4:25 PM, kleverso...@gmail.com
<kleverso...@gmail.com> wrote:
> Bruno o strack trace:
>
> 03-27 16:24:10.172: E/AndroidRuntime(327): FATAL EXCEPTION: main
> 03-27 16:24:10.172: E/AndroidRuntime(327): java.lang.NullPointerException
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.widget.AbsListView.obtainView(AbsListView.java:1419)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.widget.ListView.onMeasure(ListView.java:1127)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.view.View.measure(View.java:8313)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.view.View.measure(View.java:8313)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.view.View.measure(View.java:8313)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.view.View.measure(View.java:8313)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.view.ViewRoot.performTraversals(ViewRoot.java:839)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.os.Handler.dispatchMessage(Handler.java:99)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.os.Looper.loop(Looper.java:123)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> android.app.ActivityThread.main(ActivityThread.java:3683)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> java.lang.reflect.Method.invokeNative(Native Method)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> java.lang.reflect.Method.invoke(Method.java:507)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
> 03-27 16:24:10.172: E/AndroidRuntime(327):     at
> dalvik.system.NativeStart.main(Native Method)
>
>
>
> 2013/3/27 Bruno Albuquerque <bruno.al...@gmail.com>
>>
>> Aparece a linha sim: AbsListView.java:1419
>>
>> Cole o stack trace inteiro aqui e vai ser mais fácil te ajudar.
>>
>>
>>
>> 2013/3/27 kleverso...@gmail.com <kleverso...@gmail.com>
>>
>>> Ele não diz a linha: aparece isso no log:
>>> android.widget.AbsListView.obtainView(AbsListView.java:1419). Já teve algum
>>> problema parecido?
>>>
>>>
>>> 2013/3/27 Diogo Henrique <diog...@gmail.com>
>>>>
>>>> O seu NullPointer e exatamente aonde ? pelo LogCat você consegue ver
>>>> exatamente a linha.
>>>> Aqui tem um exemplo desse evento que você quer pegar.
>>>> http://www.ezzylearning.com/tutorial.aspx?tid=1351248
>>>>
>>>> Diogo Henrique
>>>> (83)87344178
>>>> Rede Sociais:
>>>> about.me/D.H
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> 2013/3/27 Kleverso...@gmail.com <kleverso...@gmail.com>
>>>>>
>>>>> Galera, sou  novo aqui. E já começo enchendo a paciencia com dúvidas,
>>>>> ainda sou novo também em termos de programar para android. sou da area de
>>>>> web. Enfim, to com 2 problemas com um Base Adapter. O primeiro. Por alguma
>>>>> razão ao acessar a essa view ele esta dando 'NullPointerException', procurei
>>>>> e não encontro a causa. A minha outra situação é. Como fazer um
>>>>> 'onItemCLickListener' nessa ListView. Podem me ajudar.
>>>>>
>>>>> Segue o código:
>>>>> * Esse é o Item que vai entrar no ListView
>>>>> category_item.xml
>>>>> <?xml version="1.0" encoding="utf-8"?>
>>>>> <LinearLayout
>>>>> xmlns:android="http://schemas.android.com/apk/res/android"
>>>>>     android:layout_width="match_parent"
>>>>>     android:layout_height="match_parent"
>>>>>     android:orientation="vertical" >
>>>>>
>>>>>         <LinearLayout android:id="@+id/Category_item"
>>>>>                 android:layout_width="fill_parent"
>>>>>                 android:layout_height="fill_parent"
>>>>>                 android:padding="3dip"
>>>>>             android:layout_marginRight="5dip">
>>>>>
>>>>>
>>>>>                 <Button
>>>>>                         android:id="@+id/Delete_category"
>>>>>                         android:layout_width="wrap_content"
>>>>>                         android:layout_height="wrap_content"
>>>>>                 android:text="Deletar"
>>>>>                  />
>>>>>
>>>>>
>>>>>             <TextView
>>>>>                 android:id="@+id/Category_title"
>>>>>                 android:layout_width="wrap_content"
>>>>>                 android:layout_height="wrap_content"
>>>>>                 android:text="@string/description"
>>>>>                 android:textColor="#000000"
>>>>>                 android:paddingTop="13dip"
>>>>>                 android:paddingBottom="13dip"
>>>>>                 android:typeface="sans"
>>>>>                 android:textSize="16sp"
>>>>>                 android:textStyle="bold" />
>>>>>
>>>>>
>>>>>      </LinearLayout>
>>>>>
>>>>> </LinearLayout>
>>>>>
>>>>> category.xml
>>>>> * A view onde esta o ListView
>>>>> <?xml version="1.0" encoding="utf-8"?>
>>>>> <LinearLayout
>>>>> xmlns:android="http://schemas.android.com/apk/res/android"
>>>>>     android:layout_width="match_parent"
>>>>>     android:layout_height="match_parent"
>>>>>     android:orientation="vertical" >
>>>>>                 <LinearLayout
>>>>>                     android:layout_width="match_parent"
>>>>>                         android:layout_height="wrap_content"
>>>>>                 >
>>>>>                         <Button
>>>>>                             android:id="@+id/menu"
>>>>>                                 android:layout_width="wrap_content"
>>>>>                         android:layout_height="wrap_content"
>>>>>                         android:text="Menu"
>>>>>                         android:layout_gravity="right"
>>>>>                     />
>>>>>                         <TextView
>>>>>                                 android:id="@+id/titleCategory"
>>>>>                                 android:layout_width="fill_parent"
>>>>>                                 android:layout_height="wrap_content"
>>>>>                                 android:text="CATEGORIES"
>>>>>
>>>>> android:textAppearance="?android:attr/textAppearanceLarge"
>>>>>                                 android:gravity="center_horizontal"
>>>>>                         />
>>>>>                 </LinearLayout>
>>>>>
>>>>>                 <LinearLayout
>>>>>                     android:layout_width="fill_parent"
>>>>>                         android:layout_height="wrap_content"
>>>>>                         android:layout_marginTop="30dp"
>>>>>                         >
>>>>>                    <EditText
>>>>>                                 android:id="@+id/CategoryName"
>>>>>                                 android:layout_width="wrap_content"
>>>>>                         android:layout_height="wrap_content"
>>>>>                         android:hint="Create new category..."
>>>>>                         />
>>>>>
>>>>>                         <Button
>>>>>                                 android:id="@+id/SaveCategory"
>>>>>                                 android:layout_width="wrap_content"
>>>>>                         android:layout_height="wrap_content"
>>>>>                         android:text="Salvar"
>>>>>                         android:layout_gravity="right"
>>>>>                         />
>>>>>
>>>>>                 </LinearLayout>
>>>>>                         <ListView
>>>>>                                 android:id="@+id/category_list"
>>>>>                                 android:layout_width="fill_parent"
>>>>>                                 android:layout_height="wrap_content"
>>>>>                         ></ListView>
>>>>> </LinearLayout>
>>>>>
>>>>>
>>>>> Adapter
>>>>> package com.prayer.adapter;
>>>>>
>>>>> import java.util.ArrayList;
>>>>> import java.util.HashMap;
>>>>>
>>>>> import android.app.Activity;
>>>>> import android.content.Context;
>>>>> import android.view.LayoutInflater;
>>>>> import android.view.View;
>>>>> import android.view.ViewGroup;
>>>>> import android.widget.BaseAdapter;
>>>>> import android.widget.Button;
>>>>> import android.widget.TextView;
>>>>>
>>>>> import com.prayer.activity.CategoryListActivity;
>>>>> import com.prayer.activity.R;
>>>>>
>>>>> public class CategoryAdapter extends BaseAdapter {
>>>>>
>>>>>         private Activity activity;
>>>>>         private ArrayList<HashMap<String,String>> data;
>>>>>         private static LayoutInflater inflater = null;
>>>>>         private Context context;
>>>>>
>>>>>         public CategoryAdapter(Activity a,
>>>>> ArrayList<HashMap<String,String>> d)
>>>>>         {
>>>>>                 activity = a;
>>>>>                 data = d;
>>>>>                 inflater = (LayoutInflater)
>>>>> activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
>>>>>         }
>>>>>
>>>>>         @Override
>>>>>         public int getCount() {
>>>>>                 // TODO Auto-generated method stub
>>>>>                 return data.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(int position, View convertView, ViewGroup
>>>>> parent) {
>>>>>                 // TODO Auto-generated method stub
>>>>>                 View vi = convertView;
>>>>>
>>>>>                 if(convertView == null)
>>>>>                 {
>>>>>                         vi = inflater.inflate(R.layout.category_item,
>>>>> null);
>>>>>
>>>>>                         Button Delete_category;
>>>>>                         TextView Category_title;
>>>>>
>>>>>                         Delete_category = (Button)
>>>>> vi.findViewById(R.id.Delete_category);
>>>>>                         Category_title = (TextView)
>>>>> vi.findViewById(R.id.Category_title);
>>>>>
>>>>>                         HashMap<String, String> category = new
>>>>> HashMap<String,String>();
>>>>>
>>>>>                         category = data.get(position);
>>>>>                         String text =
>>>>> category.get(CategoryListActivity.Key_category).toString();
>>>>>                         Category_title.setText(text);
>>>>>                         return vi;
>>>>>
>>>>>                 }
>>>>>
>>>>>                 return null;
>>>>>         }
>>>>>
>>>>> }
>>>>>
>>>>> Activity
>>>>> package com.prayer.activity;
>>>>>
>>>>> import java.text.SimpleDateFormat;
>>>>> import java.util.ArrayList;
>>>>> import java.util.Date;
>>>>> import java.util.HashMap;
>>>>>
>>>>> import android.app.Activity;
>>>>> import android.app.AlertDialog;
>>>>> import android.content.Intent;
>>>>> import android.database.Cursor;
>>>>> import android.os.Bundle;
>>>>> import android.view.View;
>>>>> import android.view.View.OnClickListener;
>>>>> import android.widget.AdapterView;
>>>>> import android.widget.AdapterView.OnItemClickListener;
>>>>> import android.widget.Button;
>>>>> import android.widget.EditText;
>>>>> import android.widget.ListAdapter;
>>>>> import android.widget.ListView;
>>>>> import android.widget.Toast;
>>>>>
>>>>> import com.prayer.adapter.CategoryAdapter;
>>>>> import com.prayer.database.Database;
>>>>> import com.prayer.database.dataBaseManager;
>>>>>
>>>>> public class CategoryListActivity extends Activity implements
>>>>> OnClickListener
>>>>> {
>>>>>
>>>>>         ArrayList<HashMap<String, String>> category = new
>>>>> ArrayList<HashMap<String,String>>();
>>>>>         Button SaveCategory, menu, Delete_category;
>>>>>         EditText CategoryName;
>>>>>         ListAdapter adapter;
>>>>>         ListView category_list;
>>>>>         public static final String Key_category = "name";
>>>>>         public Database database = new Database(new
>>>>> dataBaseManager(this));
>>>>>
>>>>>         //public static final String Key_count = null;
>>>>>
>>>>>         public void onCreate(Bundle savedInstanceState)
>>>>>         {
>>>>>                 super.onCreate(savedInstanceState);
>>>>>                 setContentView(R.layout.category);
>>>>>
>>>>>                 category_list = (ListView)
>>>>> findViewById(R.id.category_list);
>>>>>                 CategoryName = (EditText)
>>>>> findViewById(R.id.CategoryName);
>>>>>
>>>>>                 SaveCategory = (Button)
>>>>> findViewById(R.id.SaveCategory);
>>>>>                 SaveCategory.setOnClickListener(this);
>>>>>
>>>>>                 menu = (Button) findViewById(R.id.menu);
>>>>>                 menu.setOnClickListener(this);
>>>>>
>>>>>                 Delete_category = (Button)
>>>>> findViewById(R.id.Delete_category);
>>>>>
>>>>>
>>>>>                 database.open();
>>>>>                 Cursor categoryItem = database.getAllCategory();
>>>>>
>>>>>                 if(categoryItem.moveToFirst())
>>>>>                 {
>>>>>                         do{
>>>>>                                 HashMap<String, String> map = new
>>>>> HashMap<String, String>();
>>>>>                                 map.put(Key_category,
>>>>> categoryItem.getString(1));
>>>>>                                 category.add(map);
>>>>>                         }while(categoryItem.moveToNext());
>>>>>
>>>>>                         adapter = new CategoryAdapter(this, category);
>>>>>                         category_list.setAdapter(adapter);
>>>>>                 }
>>>>>
>>>>>                 database.close();
>>>>>         }
>>>>>
>>>>>         //implements method of OnClick
>>>>>         @Override
>>>>>         public void onClick(View v) {
>>>>>                 switch(v.getId())
>>>>>                 {
>>>>>                         case R.id.SaveCategory:
>>>>>                                 save();
>>>>>                         break;
>>>>>                         case R.id.menu:
>>>>>                                 Intent intent = new Intent(this,
>>>>> MenuActivity.class);
>>>>>                                 startActivity(intent);
>>>>>                         break;
>>>>>                 }
>>>>>         }
>>>>>
>>>>>         //method to save category in database
>>>>>         public void save()
>>>>>         {
>>>>>                 SimpleDateFormat date = new
>>>>> SimpleDateFormat("yyyyMMddHHmmss");
>>>>>                 String create_date = date.format(new Date());
>>>>>
>>>>>                 CategoryName = (EditText)
>>>>> findViewById(R.id.CategoryName);
>>>>>                 String category = CategoryName.getText().toString();
>>>>>
>>>>>                 database.open();
>>>>>                         try{
>>>>>                                 database.insertCategory(create_date,
>>>>> category);
>>>>>                                 msg("Aviso", "Categoria cadastrada com
>>>>> sucesso!");
>>>>>                                 Intent intent = new Intent(this,
>>>>> CategoryListActivity.class);
>>>>>                                 startActivity(intent);
>>>>>                         }catch(Exception e)
>>>>>                         {
>>>>>                                 msg("Erro", "Categoria n‹o
>>>>> cadastrada");
>>>>>                         }
>>>>>                 database.close();
>>>>>         }
>>>>>
>>>>>         public void msg(String title, String text)
>>>>>         {
>>>>>                 AlertDialog.Builder mensage = new
>>>>> AlertDialog.Builder(this);
>>>>>                 mensage.setTitle(title);
>>>>>                 mensage.setMessage(text);
>>>>>                 mensage.setNegativeButton("ok", null);
>>>>>                 mensage.show();
>>>>>         }
>>>>>
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Android Brasil - Dev" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to androidbrasil-...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>
>>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Android Brasil - Dev" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to androidbrasil-...@googlegroups.com.
>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>>>
>>>
>>>
>>>
>>>
>>> --
>>> Att,
>>>
>>> Kleverson Holnda Costa
>>> Programador de Interface
>>> (61) 8446-5961
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Android Brasil - Dev" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an
>>> email to androidbrasil-...@googlegroups.com.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Android Brasil - Dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to androidbrasil-...@googlegroups.com.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>
>
>
>
> --
> Att,
>
> Kleverson Holnda Costa
> Programador de Interface
> (61) 8446-5961
>
> --
> You received this message because you are subscribed to the Google Groups
> "Android Brasil - Dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to androidbrasil-...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.





--
Att,

Kleverson Holnda Costa
Programador de Interface
(61) 8446-5961

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário