1

以下にコードで示すように、CustomAdapterをデータに入力するためのリストビューがあります。

1.)リストビューの行はクリック可能であり、onItemClickは2つのボタンの再取得/レビューを表示します。

2.)他の行をクリックすると、前の行に表示されていたボタンが非表示になります。

3.)リストをスクロールすると、すべてのボタンが再び非表示になりますが、これは発生しないはずです。

ポイントNo.を達成しました。このコードで1ですが、どうすれば2,3を達成できますか。getView()アダプターの方法を変更したりonItemClick()、正しく機能するようにするにはどうすればよいですか。

//アダプタで初期化されたリストビュー

AttempListView.setAdapter(new AttemptedExcerciseAdapter(mAttempRecord,AttemptedExercise.this));

//値を配置するための別のアダプタクラス

パブリッククラスAttemptedExcerciseAdapterはBaseAdapterを拡張します{

HashMap<Integer, AttemptedRecord> mHashMap;
Context mContext;
LinearLayout mLLButton;

public AttemptedExcerciseAdapter() {
    // TODO Auto-generated constructor stub
}

public AttemptedExcerciseAdapter(HashMap<Integer, AttemptedRecord> mAttempRecord,Context mContext) {
    this.mHashMap = mAttempRecord;
    this.mContext=mContext;
}
@Override
public int getCount() {
    return mHashMap.size();
}
@Override
public Object getItem(int arg0) {
    return null;
}
@Override
public long getItemId(int arg0) {
    return 0;
}


@Override
public View getView(final int position, View convertView, ViewGroup arg2) {
    if (convertView == null) {
        @SuppressWarnings("static-access")
        LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(AttemptedExercise.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.exerciselistlayout, null);
    }

    TextView attempChapter_name = (TextView) convertView.findViewById(R.id.TVchapterexercisechapterName);
    TextView attemptQues = (TextView) convertView.findViewById(R.id.tvexercisesuccessrate);
    TextView attemptSR = (TextView) convertView.findViewById(R.id.tvexerciseperquestiontime);

    Button ReviewButton = (Button) convertView.findViewById(R.id.ReviewButton);
    Button RetakeButton = (Button) convertView.findViewById(R.id.RetakeButton);
    LinearLayout mLLtext = (LinearLayout) convertView.findViewById(R.id.LLText);
    mLLButton = (LinearLayout) convertView.findViewById(R.id.LLButton);

    mLLButton.setVisibility(View.INVISIBLE);
    mLLtext.setVisibility(View.VISIBLE);
    System.out.println("data value is..."+position+mHashMap.get(position + 1).getChapter_name());

    attempChapter_name.setText(mHashMap.get(position+1).getChapter_name());
    attemptQues.setText(" " + mHashMap.get(position+1).getTimePerQues() + " sec/ques");
    attemptSR.setText(" " + mHashMap.get(position+1).getSuccess_rate() + " %");

    return convertView;
}

}

//リストビューのアイテムクリックリスナー

パブリッククラスExcerciseItemClickListenerはOnItemClickListenerを実装します{

    ArrayList<Integer> rowNo=new ArrayList<Integer>();

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

        System.out.println("click working..."+arg2);

        arg1.findViewById(R.id.LLButton).setVisibility(View.INVISIBLE);

        rowNo.clear();

        rowNo.add(arg2);

        if(rowNo.size()==1)
        {   
        AttemptedRecord mRecordExcerciseItem = mAttempRecord.get(arg2 + 1);

        final int chapter_id = mRecordExcerciseItem.getChapter_id();
        final int test_id = mRecordExcerciseItem.getTest_id();
        final int subject_id = mRecordExcerciseItem.getSubject_id();

        System.out.println("attempted  list size is..."+mAttempRecord.size());

            arg1.findViewById(R.id.LLText).setVisibility(View.INVISIBLE);
            arg1.findViewById(R.id.LLTake).setVisibility(View.INVISIBLE);
            arg1.findViewById(R.id.LLButton).setVisibility(View.VISIBLE);

            Button review=(Button) arg1.findViewById(R.id.ReviewButton);
            Button retake=(Button) arg1.findViewById(R.id.RetakeButton);

            review.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    DBHelper mDbHelper = new DBHelper(AttemptedExercise.this);
                    mDbHelper.createOrOpenDatabase("Dashboard");
                    Cursor chpater_exercise_Cursor = mDbHelper.rawQuery("select current_test_id from practice_test_summary where test_id="+test_id+" order by test_datetime desc limit 1");

                    chpater_exercise_Cursor.moveToFirst();

                    Long current_test_id =chpater_exercise_Cursor.getLong(0);
                    chpater_exercise_Cursor.close();

                    System.out.println("value of current test id is...."+current_test_id);

                    Intent reviewIntent = new Intent(AttemptedExercise.this, PracticeReview.class);
                    reviewIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY);
                    if (current_test_id > 0) {
                        reviewIntent.putExtra("current_test_id", current_test_id);
                        startActivity(reviewIntent);
                    }
                }
            });

            retake.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    System.out.println("test id value when test starts is... "+test_id);
                    Toast.makeText(AttemptedExercise.this, "chapter_id" + chapter_id + " course_id"  + " test_id" + test_id + " subject_id" + subject_id, Toast.LENGTH_LONG).show();
                    StartTest(4, subject_id, chapter_id, test_id);
                }
            });
        }
    }
    }
4

2 に答える 2

4

getViewでは、ボタンとテキストを非表示にします。そのため、スクロールするとビューが表示されなくなります。</ p>

mLLButton.setVisibility(View.INVISIBLE);
mLLtext.setVisibility(View.VISIBLE);

クリックリスナーでは、選択した行の位置を記録する必要があります。getViewでは、ビューの位置に基づいてビューの可視性ステータスを設定する必要があります。

于 2012-12-14T07:34:02.490 に答える
2

このようClickListenersにリストを追加するように管理できる場合getView

convertView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            curruntButtonClickPosition=position;
                            //Visible you button here
                            notifyDataSetChanged();
        }
    });

とでgetView

 if(curruntButtonClickPosition=position)
   //mLLButton visible
else
  //mLLButton  invisible

curruntButtonClickPositionクラスにgloble変数を追加AttemptedExcerciseAdapterし、-1で初期化します。

于 2012-12-14T07:41:28.133 に答える