2016-07-02 5 views
0

データベースに102個のパズルを持つ小さなパズルアンドロイドアプリを開発しています。私はを2 TextViewsとし、ButtonListViewとした。リストビューの押されたボタンが押されて5番目の位置にある

私はパズルを表示するためにTextViewとしてpuzzlを持っています。答えはTextViewと答えています(デフォルトではGONEとなっています)。ユーザーがanswer_buttonを押すとTextView答えが答え(answer.setVisibility(View.VISIBLE);)を示します。

すべて問題なく動作していますが、問題があることがわかりました。私がListViewに見るために1番目の答えのためにボタンを押すと、それは1番目の答えを示していますが、下からも例えば5番目、11番目、16番目などの他の回答を開いています。私が2番目の答えのためにボタンを押すと、それは2番目の答えと7番目、12番目などを示しています。すべてが開いています。

ボタンを作成したいのは、選択した回答のみをユーザーに表示する必要があります。助けてください、アダプターまたはListViewの私の間違いはどこですか?どうもありがとうございました。

public class PuzzleAdapter extends BaseAdapter{ 

    Context context; 
     LayoutInflater inflater; 
     List<Puzzles> puzzles; 

    public PuzzleAdapter(Context context1, List<Puzzles> p1){ 
     this.context=context1; 
     this.puzzles =p1; 
     inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     return puzzles.size(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return puzzles.get(i); 
    } 

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

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 

     if (view == null){ 
      view = inflater.inflate(R.layout.puzzle_adapter, null); 
     } 

     final Puzzles puzz = this.puzzles.get(i); 

     TextView puzzl=(TextView)view.findViewById(R.id.puzzl); 
     puzzl.setText(puzz.getZagad()); 

     final TextView answer=(TextView)view.findViewById(R.id.answer); 
     answer.setText(puzz.getOtveti()); 

     final Button answer_button = (Button)view.findViewById(R.id.answer_button); 

     answer_button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       answer.setVisibility(View.VISIBLE); 
      } 
     }); 

     return view; 
    } 
} 

私はあなたが直接見、したがって、この問題は発生し維持、

をとっているように私は、データベース

// public List<Puzzles> zagadki(int id){ 
    public List<Puzzles> zagadki(Context context){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
     List<Puzzles> puzzles = new ArrayList<Puzzles>(); 
//  String s = "select * from zagad where _id=" + id; 
     String s = "select * from zagad"; 
     Cursor cursor = db.rawQuery(s, null); 
     if (cursor.moveToFirst()){ 
      do { 
       Puzzles puzzle = new Puzzles(); 
       puzzle.set_id(cursor.getInt(0)); 
       puzzle.setZagad(cursor.getString(1)); 
       puzzle.setOtveti(cursor.getString(2)); 
       puzzles.add(puzzle); 
      } 
      while (cursor.moveToNext()); 
     } 
     db.close(); 
     return puzzles; 
    } 
+0

がnullチェックを削除し(図== NULL){ ビュー= inflater.inflate(R.layout.puzzle_adapter、NULL)場合 を試みます。 } –

+0

お兄さん、私の問題を解決してくれてありがとうございました –

答えて

0

から呼び出すここアダプタ

public class MainActivity extends AppCompatActivity { 

    private DbHelper dbHelper; 
    List<Puzzles> puzzles = new ArrayList<Puzzles>(); 
    ListView listView; 
    PuzzleAdapter puzzleAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     dbHelper = new DbHelper(this); 
     dbHelper.createDB(); 

     puzzles = dbHelper.zagadki(this); 
     puzzleAdapter = new PuzzleAdapter(this, puzzles); 

     listView = (ListView)findViewById(R.id.listView); 
     listView.setAdapter(puzzleAdapter); 
    } 
} 

を呼ぶ私のメインクラスだから、ホルダークラスを使用し、私の下のコードを確認して管理する

public class ViewHolder { 

     TextView puzzl; 
     TextView answer; 
     Button answer_button; 
    } 

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 

     View row = view; 
     ViewHolder holder= null; 

     if (row == null) 
     { 
      row = inflater.inflate(R.layout.puzzle_adapter, null); 
      holder = new ViewHolder(); 
      holder.puzzl=(TextView)view.findViewById(R.id.puzzl); 
      holder.answer=(TextView)view.findViewById(R.id.answer); 
      holder.answer_button = (Button)view.findViewById(R.id.answer_button); 
      row.setTag(holder); 

     } 
     else 
     { 
      holder = (AppInfoHolder)row.getTag(); 
     } 
       holder.puzzl.setText(puzz.getZagad()); 
       holder.answer.setText(puzz.getOtveti()); 
       holder.answer_button.setTag(holder); 

       holder.answer_button.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View view) { 
         ViewHolder selectedHolder = (View Holder) view.getTag(); 

         selectedHolder.answer.setVisibility(View.VISIBLE); 
         } 
       }); 

     return row; 
    } 
+0

非常に弟が説明をくれてありがとう、それは私を助けてくれました –

+0

コードをお楽しみください – Vickyexpert

+0

@AkramPulatovこの回答が役に立ったと感じる場合は、緑色のチェックマークをクリックしてください。これはコミュニティが未回答の質問に焦点を当てるのに役立ちます。 – Lahiru

関連する問題