2

В моей основной деятельности я назвал объект write методом itemClicked().Выберите элемент внутри адаптера listview android

public void itemClicked(){ 

     System.out.println("Clicked"); 
     efficienadapter.notifyDataSetChanged(); 
    } 

Я пытаюсь напечатать щелкнутый элемент, когда я выбираю строку из своего списка. Примечание. Я использую listadapter под названием EfficientAdapter.

Вот адаптер:

 public class EfficientAdapter extends BaseAdapter { 



      private Activity activity; 
      private ArrayList<ComptePost> data; 
      private static LayoutInflater inflater = null; 
      public ImageLoader imageLoader; 
      public Boolean isActusAstuce; 
      public static int flag = 0, counter=0; 
      NVirementEmmeteur main; 
      int num=0; 

      ViewHolder holder; 
      static String src; 

      public EfficientAdapter(Activity a, ArrayList<ComptePost> d) { 


       activity = a; 
       data = d; 
       inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      // imageLoader = new ImageLoader(activity.getApplicationContext()); 
       imageLoader=new ImageLoader(activity.getApplicationContext()); 
      } 

      public EfficientAdapter(NVirementEmmeteur m) { 
       main=m; 
      } 

      @Override 
      public int getCount() { 
       return data.toArray().length; 

      } 

      @Override 
      public Object getItem(int position) { 

       return position; 
      } 

      @Override 
      public long getItemId(int position) { 
       return position; 
      } 

      public static class ViewHolder { 

       public TextView one; 
       public TextView two; 
       public TextView three; 
       public ImageView image; 
         public RelativeLayout relative; 
      } 

      @Override 
      public View getView(final int position, View convertView, ViewGroup parent) { 
       View vi = convertView; 



       if (convertView == null) { 

        vi = inflater.inflate(R.layout.single_item, null); 
        holder = new ViewHolder(); 
        holder.one = (TextView) vi.findViewById(R.id.text_view_one); 
        holder.image = (ImageView)vi.findViewById(R.id.imageView1); 
        holder.relative = (Relativelayout)vi.findViewById(R.id.relative); 
vi.setTag(holder); 

       } else 
        holder = (ViewHolder) vi.getTag(); 

        holder.one.setTextColor(Color.WHITE); 
        holder.one.setText("Compte No."+data.get(position).getNumComtpe()); 
        holder.image.setVisibility(View.GONE); 


        holder.relative_layout.setOnClickListener(new OnClickListener(){ 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 

      v.findViewById(R.id.imageView1).setVisibility(View.VISIBLE); 

        main.itemClicked(); 

       } 

      }); 


        //flag=0; only first row become white 


       return vi; 
      } 


i used main.itemClicked() to print "Clicked". 


     holder.relative_layout.setOnClickListener(new OnClickListener(){ 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 

        v.findViewById(R.id.imageView1).setVisibility(View.VISIBLE); 

        main.itemClicked(); 

       } 

      }); 

, но когда я выбираю элемент строки я получил эту ошибку.

04-10 14:21:43.832: W/dalvikvm(4985): threadid=1: thread exiting with uncaught exception (group=0x40015578) 
04-10 14:21:43.847: E/AndroidRuntime(4985): FATAL EXCEPTION: main 
04-10 14:21:43.847: E/AndroidRuntime(4985): java.lang.NullPointerException 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at .EfficientAdapter$1.onClick(EfficientAdapter.java:111) 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at android.view.View.performClick(View.java:2538) 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at android.view.View$PerformClick.run(View.java:9152) 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at android.os.Handler.handleCallback(Handler.java:587) 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at android.os.Looper.loop(Looper.java:130) 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
04-10 14:21:43.847: E/AndroidRuntime(4985):  at dalvik.system.NativeStart.main(Native Method) 

где я ошибаюсь?

+0

не то, что я ищу :( – yakusha

+0

Нету я думаю, что мой конструктор виновный «NVirementEmmeteur основной;» – yakusha

+0

вы должны добавить щелчок listnet на VI означают на convertView InstEd использования itemclick для difftent пункта, как я приведенный выше или используйте макет раскладки, который находится в R.layout.single_item. Если у вас есть линейный макет, то используйте linearlayout.onitemclick .... –

ответ

0

вот простой пример, как скрыть изображение из списка. сначала попытайтесь понять этот код после этого, измените свой код.

enter image description here

У меня есть ListView с текстом & изображения.

вот файл строки списка по списку my_spinner_style.xml.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:orientation="horizontal" 
    android:weightSum="2" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Large Text" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:src="@drawable/ic_launcher" /> 

</LinearLayout> 

мой класс активности:

package com.example.testapp; 

import android.app.ListActivity; 
import android.content.Context; 
import android.os.Bundle; 
import android.text.Html; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class MainActivity extends ListActivity { 

    private static final String[] COUNTRIES = new String[] { "Belgium", 
      "France", "Italy" }; 

    private static final Integer[] img = new Integer[] { 
      R.drawable.ic_launcher, R.drawable.dhaval1, R.drawable.ic_launcher }; 

    private MyArrayAdapter adapter; 
    Bundle savedInstanceState; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     adapter = new MyArrayAdapter(MainActivity.this); 
     getListView().setAdapter(adapter); 

    } 

    private class MyArrayAdapter extends BaseAdapter { 

     private LayoutInflater mInflater; 

     public MyArrayAdapter(Context con) { 
      // TODO Auto-generated constructor stub 
      mInflater = LayoutInflater.from(con); 
     } 

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

     @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 
      final ListContent holder; 
      View v = convertView; 
      if (v == null) { 
       v = mInflater.inflate(R.layout.my_spinner_style, null); 
       holder = new ListContent(); 

       holder.name = (TextView) v.findViewById(R.id.textView1); 

       holder.name2 = (ImageView) v.findViewById(R.id.imageView1); 

       v.setTag(holder); 
      } else { 

       holder = (ListContent) v.getTag(); 
      } 

      holder.name.setText("" + Html.fromHtml("" + COUNTRIES[position])); 

      holder.name2.setImageDrawable(getResources().getDrawable(
        img[position])); 
      holder.name.setOnClickListener(mOnTitleClickListener3); 

      return v; 
     } 

    } 

    static class ListContent { 

     TextView name; 

     ImageView name2; 

    } 

    public OnClickListener mOnTitleClickListener3 = new OnClickListener() { 
     public void onClick(View v) { 
      final int position = getListView().getPositionForView(
        (View) v.getParent()); 

      View rowView = getListView().getChildAt(position); 
      if (rowView != null) { // do whatever you want here 
       View mainv = ((ViewGroup) rowView).getChildAt(1); 
       Log.e("select dd--->", "" + mainv); 

       // hide Image from here.... 
       mainv.setVisibility(View.GONE); 
      } 

     } 
    }; 

    protected void onRestart() { 
     // adapter.notifyDataSetChanged(); 
     onCreate(savedInstanceState); 
    }; 

} 

Я addd OnClickListener на TextView InstEd того, что вы можете использовать ваш макет perent. im мой случай LinearLayout.

+0

Я использую это в своей основной деятельности public static OnClickListener compte_emmetteur_clicked = new OnClickListener() { public void onClick (View v) { final int position = lv1.getPositionForView ((View) v.getParent()); \t \t \t EfficientAdapter.ViewHolder.image.setVisibility (View.VISIBLE); \t \t \t image_compte_emmeteur.setBackgroundResource (R.drawable.virement_compte_emmeteur_gris); Log.d («вы нажимаете« Рейтинги », PostList.get (position) .getNumComtpe()); } }; – yakusha

+0

Я хочу адаптировать первый пример к моему коду, не меняя все чувак. я пришел к хорошему пути с первого примера, который вы даете. просто нужно знать, как настроить изображение на видимое для выбранной строки. но я буду отмечать ваш ответ в качестве правильного ответа, поскольку вы мне очень помогаете – yakusha

+0

@yakusha: этот тип материала не работает хорошо. просто для k'no представьте, что я добавил это здесь .. но я не прощаю любой такой, чтобы это сделать ... –

0

я подозреваю, что это происходит здесь:

@Override 
public void onClick(View v) { 
    System.out.println("Clicked "+data.get(position).getDebitMin()); 
    v.findViewById(R.id.imageView1).setVisibility(View.VISIBLE); 
    main.itemClicked(); 
} 

ошибка происходит в строке 111, это означает, что один из трех вариантов произошло:
1. Данные null или данные. getposition является null.
2. Вид, который вы находите в следующей строке, возвращает null.
3. main is null.

+0

вы ' re right main.itemClicked() - ошибка. – yakusha

+0

, но как элемент может быть пустым, если я просто печатаю значение по умолчанию. это мой конструктор, который ошибочен: O – yakusha

+0

вы передаете «null» в конструкторе. – thepoosh

0

В этом случае, не следует ли использовать setOnItemClickListener? Если да, поместите его в свой ListView.

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

     view.setVisibility(View.VISIBLE); 
     MainActivity.itemClicked(); 
    } 
});