2012-04-21 13 views
0

アクティビティの開始時(または行の膨張時)に非表示に設定されている4つの画像ビューがあります。私はボタンを押して、すべてを見えるようにしたいと思います。私は次の要約コードを持っていますが、最後のもの以外の他の画像ビューにアクセスしようとするとエラーが発生します。Android - IDまたはタグで複数の画像ビューで表示/非表示を切り替える

public class xx { 

    private ImageView up; 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // Log.i(TAG, "excersizeAdapter getView"); 
      View v = convertView; 
      if (v == null) { 
       LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.row, null); 
      } 

      Excersize e = items.get(position); 
      if (e != null) { 
       TextView exTitle  = (TextView) v.findViewById(R.id.ex_type_title); 
       TextView exOn   = (TextView) v.findViewById(R.id.ex_on_title); 
       TextView exRestAmount = (TextView) v.findViewById(R.id.ex_rest_amount); 
       TextView exSequence = (TextView) v.findViewById(R.id.ex_sequence); 

       up     = (ImageView) v.findViewById(R.id.moveup); 
       down     = (ImageView) v.findViewById(R.id.movedown); 

       if (exTitle !=null) { 
        exTitle.setText(e.getTypeTitle()); 
       } 

       if (exOn !=null) { 
        exOn.setText("On: "+e.getTypeOn()); 
       } 

       if (exRestAmount !=null) { 
        exRestAmount.setText(e.getRestAmount().toString()); 
       } 

       if (exSequence !=null) { 
        exSequence.setText(e.getSequence().toString()); 
        up.setTag(8881); 
        down.setTag(8882); 

        up.setId(((Integer)e.getSequence())); 
        down.setId(((Integer)e.getSequence())); 

        Log.i(TAG, "up,down values=" +e.getSequence()); 
       } 
      } 
      return v; 
     } 
    } 

    public void toggleReorderButtons() { 
     up.findViewById(2).setVisibility(View.VISIBLE); 
     up.setVisibility(View.VISIBLE); 
     up.setOnClickListener(this); 
    } 
} 

OK、これはコードを削減されますが、その他にはクラッシュを引き起こし、up.setvis up.findview... makevisinvis方法、で私の活動に追加された最後のものだけをオンにします。

私はまた、以下を成功裏に試みました。

ImageView upper = (ImageView) up.findViewById(2); 
upper.setVisibility(View.VISIBLE); 

素敵なエラーダンプ:

04-21 09:10:55.650: W/dalvikvm(22392): threadid=1: thread exiting with uncaught exception (group=0x4001e578) 
04-21 09:10:55.675: E/AndroidRuntime(22392): FATAL EXCEPTION: main 
04-21 09:10:55.675: E/AndroidRuntime(22392): java.lang.NullPointerException 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at com.mediabarltd.digittrainer.ProgramDisplay.toggleReorderButtons(ProgramDisplay.java:437) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at com.mediabarltd.digittrainer.ProgramDisplay.onClick(ProgramDisplay.java:391) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at android.view.View.performClick(View.java:2538) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at android.view.View$PerformClick.run(View.java:9152) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at android.os.Handler.handleCallback(Handler.java:587) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at android.os.Looper.loop(Looper.java:130) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at android.app.ActivityThread.main(ActivityThread.java:3691) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
04-21 09:10:55.675: E/AndroidRuntime(22392):  at dalvik.system.NativeStart.main(Native Method) 

それは見ているいくつかの深刻なと私は何をやっていたの合計リワークを取りました。しかし...

基本的に私は、チュートリアルAndroid ListView and ListActivityを踏襲して、Android ListView Adapter OnClickListener issueで説明きちんと「トリック」を実施しました。

(私は本当にこれで苦労しています。)

+1

投稿されたログによると、NPEは 'makevisinvis'にはありません。ダブルチェックしていただけますか?また、オブジェクトを定義するinits/upits/ – Asahi

+0

のコードを投稿することができます。申し訳ありませんが、私のexamlpeで愚かだったので、私はそれを書き出す際にメソッド名を変更しました。私は更新します.... – Purplemonkey

答えて

1

upをクラスメンバーとして定義し、getViewが呼び出されるたびに再起動します。したがって、常に最後に作成されたイメージビューを指します。また、findViewByIdupと呼ぶのは間違いです。その代わりにOnClickListenergetViewに設定し、クリックするたびに、それが所属するレイアウト内で必要なビューを探します。

+0

私はあなたが何かそこにいると思う。私はちょうどいくつかのチェックをして、IDは常にIDが設定されている最後のものです。それは他のものを上書きする必要があります.. – Purplemonkey

+0

助けてくれてありがとう、私は今私のコードを整理し、私の元の投稿に私の解決策を含めている。 – Purplemonkey

1

あなたはImageViewのにIDを与える必要があり、

android:id="@+id/some_name" 

のような次に、このようにそれを見つける:

up.findViewById(R.id.some_name); 
+0

私はすでに最初の膨張プロセス中にこれを行いました "up \t \t \t \t \t \t =(ImageView)v.findViewById(R.id.moveup);"それはあなたが意味することですか、これをやり直す必要がありますか?私がこれをした後、私はIDを割り当て、私はそれを参照するために使用することができるだろうと思った? (また、上の行を追加しました) – Purplemonkey

+0

R.idをちょうど使用してください –

+0

どのようにイメージビューの各バージョンを個別に参照するのですか?私はそれがセットアイランドがそこに入った場所だと思ったのですか? – Purplemonkey

0

これを使用:

int i = (int) up.getTag(); 
if (i == 8881) { 
    //Do something here 
} 
+0

ok私はタグの存在にどのように作用するのかを見ることができますが、この方法を使ってアップした4つのイメージビューをすべて表示する方法はありますか? – Purplemonkey

+0

各画像ビューのタグを取得し、ネストされた条件を使用します。 –

関連する問題