2

在我的主要活动中,我调用了一个对象写一个方法itemClicked()。选择一个项目内的列表视图适配器android

public void itemClicked(){ 

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

我想打印单击项目,当我从我的列表视图中选择一行。注意:我正在使用名为EfficientAdapter的listadapter。

这里是适配器:

 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 2013-04-10 10:47:28

+0

没了,我认为我的构造函数是有罪的“NVirementEmmeteur为主;” – yakusha 2013-04-10 10:53:17

+0

你有六加点击listnet意味着对convertView insted的使用itemClick在为difftent项目像我上面给出如果你有线性布局,然后使用linearlayout.onitemclick .... – 2013-04-10 10:55:07

回答

0

这里是一个简单的例子,如何从列表视图中隐藏图像。在修改代码之后,首先尝试理解此代码。

enter image description here

我有文字&图像列表视图。

这里是列表视图的行文件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); 
    }; 

} 

我已经TextView ADDD OnClickListener insted的,你可以用你的perent布局。我的情况是LinearLayout

+0

我在我的主要活动中使用此公共静态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); (“您点击评分”,PostList.get(position).getNumComtpe()); } }; – yakusha 2013-04-10 12:32:04

+0

我想适应第一个例子,我的代码不会改变一切家伙。我给你的第一个例子走上了一条好路。只需要知道如何将图像设置为可见的选定行。但我会标记你的答案是正确的答案,因为你帮助我很多 – yakusha 2013-04-10 12:40:40

+0

@yakusha:这种类型的东西不能很好地工作..只是为了k'no prepose我已经在这里添加了这个..但我没有saggest任何一个这样做... – 2013-04-10 12:44:10

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或数据。 getpositionnull
2.您在下一行发现的视图正在返回null
3. main是null

+0

你'重新右键main.itemClicked()是错误。 – yakusha 2013-04-10 10:40:26

+0

,但如果我只是打印一个默认值,物品如何被点击为空。它是我的构造函数,它是错误的:O – yakusha 2013-04-10 10:43:42

+0

你在构造函数中传递'null'。 – thepoosh 2013-04-10 12:40:00

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(); 
    } 
}); 
相关问题