-1

リストビュー項目のいずれかをクリックすると、クリックされた項目ビュー以外のビューを取得する際に問題に直面しています。クリックしたアイテム ビュー以外の各リスト アイテム ビューからビューを非表示にする必要があります。

以下のコードは、一度に表示される項目 4 または 5 の数が少ない場合は正常に動作しますが、複数の項目が画面よりも多く占有されている場合、問題 (強制終了でクラッシュ - panel1 の初期化時に NullPointerException) が発生します。サイズ。

 for(int count = 0; count<listAdapter.getCount(); count++)

    {

     if(arg2!=count) 

       {

     int visiblePosition = jobList.getFirstVisiblePosition();

     View v = jobList.getChildAt(count - visiblePosition);



            panel1 = (LinearLayout)v.findViewById(R.id.panel1);

    panel1.setVisibility(View.GONE);

        }
    }

上記のコードでビューの初期化を置き換えました

から

      View v = jobList.getChildAt(count - visiblePosition);

      View v = jobList.getChildAt(count);

ただし、問題は同じです。つまり、現在表示されているアイテムよりも多くのアイテムがある場合に備えて、ビューで NPE を受け取りますこれは、 for loop count < listAdapter.getCount()の条件が間違っているためだと 思います。この問題を解決するには、これを別のものに変更する必要があると思います。

forループ(初期化/条件)で何を変更する必要があるかを提案してください。

4

3 に答える 3

0

できることは、クリックされたアイテムの位置を取得することです。0 から getChildCount() までの for ループを実行し、各位置をクリックされた位置と一致させます。一致する場合は、else 部分で何もしないでください。view.setVisibility(View.Invisible) を実行します。それはうまくいくと思います。あなたの問題が解決されることを願っています.....

解決策を手に入れました ここにあなたの onItemClickListener があります

 listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            clickArrayList.clear();
            Toast.makeText(
                    ViewActivity.this,
                    "First Name: "
                            + studentArrayList.get(
                                    (int) listView.getAdapter().getItemId(
                                            arg2)).getFirstName() + "\n"
                            + "Last Name: "
                            + studentArrayList.get(arg2).getLastName(),
                    Toast.LENGTH_LONG).show();
            for (int i = 0; i < listView.getAdapter().getCount(); i++) {
                if (arg2 == i) {

                } else {

                    clickArrayList.add(arg2);
                }

            }
            listView.setAdapter(new MyCustomAdapter(ViewActivity.this,
                    studentArrayList, clickArrayList));



        }
    });

カスタムアダプターのgetviewメソッドで、変換ビューを返す直前にこれを行います....

    for (int i = 0; i < clicked.size(); i++) {
        Log.d("tag", "Position.... " + clicked.get(i));
        if (!(clicked.get(i) == arg0)) {
            holder.FirstnameText.setVisibility(View.INVISIBLE);
            holder.lastNameText.setVisibility(View.INVISIBLE);
        } else {
            holder.FirstnameText.setVisibility(View.VISIBLE);
            holder.lastNameText.setVisibility(View.VISIBLE);
        }

    }
于 2013-05-08T09:00:24.933 に答える