2017-09-13 1 views
1

일부 게시물을 읽고 reQuery()은 사용되지 않으며 SwapCursor() 또는 ChangeCursor()을 사용하는 것이 좋습니다.Android : 이전 API를 지원하는 CursorAdapter를 새로 고치는 방법?

나는 DB를 업데이트하고 버튼의 색상을 변경하는 클릭에 대한 즐겨 찾기 버튼이 있습니다. 스크롤하여 특정보기 (및 단추)로 돌아 오면 색상이 재설정됩니다. 보기가 재활용되어 있기 때문에 알 수 있습니다. 나는 DB 칼럼 값을 기반으로 버튼의 색상을 설정하는 조건이 있습니다.

버튼을 누른 후에 DB에서 업데이트 된 값을 가져 오려면 어떤 나는/쿼리 Cursor/DB 새로 고쳐야 만합니다.

필자는 CursorAdapter를 사용하여 필자의 min. API가 19 점입니까?

UPDATE CursorAdapter 코드 :

공용 클래스 ToDoCursorAdapter는 CursorAdapter를 확장 {

SparseBooleanArray selectionArrayAr = new SparseBooleanArray(); 
SparseBooleanArray selectionArrayRef = new SparseBooleanArray(); 
SparseBooleanArray selectionArrayFav = new SparseBooleanArray(); 
//Boolean isSet = false; 
private MainButtons_Interface mAdapterCallback; 


public ToDoCursorAdapter(Context context, Cursor cursor) { 
    super(context, cursor, 0); 
} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 

    ViewHolderItem viewHolder = new ViewHolderItem(); 
    View rowView = LayoutInflater.from(context).inflate(R.layout.listview, parent, false); 

    viewHolder.engTextV = (TextView) rowView.findViewById(R.id.engText); 

    viewHolder.arTextV = (TextView) rowView.findViewById(R.id.arabText); 
    viewHolder.buttonIAV = (Button) rowView.findViewById(R.id.buttonIA); //For Arabic Text 


    viewHolder.refTextV = (TextView) rowView.findViewById(R.id.refText); 
    viewHolder.buttonIRV = (Button) rowView.findViewById(R.id.buttonIR); //For Ref Text 

    viewHolder.buttonIFV = (ImageButton) rowView.findViewById(R.id.buttonF); 


    rowView.setTag(viewHolder); 
    return rowView; 
} 

@Override 
public void bindView(final View view, final Context context, final Cursor cursor) { 


    final ViewHolderItem viewHolder = (ViewHolderItem) view.getTag(); 

    String arabic = cursor.getString(cursor.getColumnIndexOrThrow("PlainArab_Text")).trim().replaceAll("[\n]{2,}", "TWOFEEDS").replaceAll("\n", " ").replaceAll(" +", " ").replaceAll("<br/>", "\n").replaceAll("TWOFEEDS", "\n") + "\n"; 
    String english = cursor.getString(cursor.getColumnIndexOrThrow("PlainEng_Text")).trim().replaceAll("[\n]{2,}", "TWOFEEDS").replaceAll("\n", " ").replaceAll(" +", " ").replaceAll("<br/>", "\n").replaceAll("TWOFEEDS", "\n") + "\n"; 
    String ref = cursor.getString(cursor.getColumnIndexOrThrow("REF")).trim().replaceAll("<br/> <br/>", " ").replaceAll("<br/>", "\n"); 

    final Integer HadithID = cursor.getInt(cursor.getColumnIndexOrThrow("ID")); 
    final Integer IsFav = cursor.getInt(cursor.getColumnIndexOrThrow("IsFavorite")); 

    viewHolder.arTextV.setText(arabic); 
    viewHolder.engTextV.setText(english); 
    viewHolder.refTextV.setText(ref); 

    final int position = cursor.getPosition(); 

    boolean isSelectedA = selectionArrayAr.get(position); 
    boolean isSelectedR = selectionArrayRef.get(position); 
    boolean isSelectedF = selectionArrayFav.get(position); 

    if (isSelectedA) { 
     viewHolder.arTextV.setVisibility(view.GONE); 
     viewHolder.buttonIAV.setText("Show Arabic Version"); 
    } else if (!isSelectedA){ 
     viewHolder.arTextV.setVisibility(view.VISIBLE); 
     viewHolder.buttonIAV.setText("Hide Arabic Version"); 
    } 

    if (isSelectedR) { 
     viewHolder.refTextV.setVisibility(view.GONE); 
     viewHolder.buttonIRV.setText("Show Refrence"); 
    } else if (!isSelectedR){ 
     viewHolder.refTextV.setVisibility(view.VISIBLE); 
     viewHolder.buttonIRV.setText("Hide Refrence"); 
    } 

    //boolean isSelectedF = selectionArrayFav.get(position); 
    if(isSelectedF) { 
     viewHolder.buttonIFV.setImageResource(R.drawable.favoritebutton_afterclick); 
    } else if (!isSelectedF){ 
     viewHolder.buttonIFV.setImageResource(R.drawable.favoritebutton); 
    } 


    //Arabic Button 
    viewHolder.buttonIAV.setOnClickListener(
      new View.OnClickListener() 
        { @Override 
         public void onClick(View v) { 
         boolean isSelectedAc = selectionArrayAr.get(position); 
          if(!isSelectedAc) { 
           viewHolder.arTextV.setVisibility(v.GONE); 
           viewHolder.buttonIAV.setText("Show Arabic Version"); 
           setSelectedAr(position, true); 
          } else if (isSelectedAc){ 
           viewHolder.arTextV.setVisibility(v.VISIBLE); 
           setSelectedAr(position, false); 
           viewHolder.buttonIAV.setText("Hide Arabic version"); 
          } 
         } 
        } 
    ); 

    //Ref Button 
    viewHolder.buttonIRV.setOnClickListener(
      new View.OnClickListener() 
      { @Override 
      public void onClick(View v) { 
       boolean isSelectedRc = selectionArrayRef.get(position); 
       if(!isSelectedRc) { 
        viewHolder.refTextV.setVisibility(v.GONE); 
        viewHolder.buttonIRV.setText("Show Reference"); 
        setSelectedRef(position, true); 
       } else if (isSelectedRc){ 
        viewHolder.refTextV.setVisibility(v.VISIBLE); 
        setSelectedRef(position, false); 
        viewHolder.buttonIRV.setText("Hide Reference"); 
       } 
      } 
      } 
    ); 


    //Fav Button 
    viewHolder.buttonIFV.setOnClickListener(
      new View.OnClickListener() 
      { @Override 
      public void onClick(View v) { 
       boolean isSelectedF = selectionArrayFav.get(position); 
       boolean IsSet = ((ListViewActivity) context).addRemFav(HadithID); 
       String mess =""; 

       if(IsSet){ 
        mess = "Hadith add to Favorite list"; 
       } else if(!IsSet){ 
        mess = "Hadith removed from Favorite list"; 
       } 

       if(!isSelectedF) { 
        viewHolder.buttonIFV.setImageResource(R.drawable.favoritebutton_afterclick); 
        setSelectedF(position, true); 

       } else if (isSelectedF){ 
        viewHolder.buttonIFV.setImageResource(R.drawable.favoritebutton); 
        setSelectedF(position, false); 
       } 

       Toast.makeText(v.getContext(), mess, Toast.LENGTH_SHORT).show(); 
      } 
      } 
    ); 
} 


// our ViewHolder. 
static class ViewHolderItem { 
    TextView engTextV; 
    TextView arTextV; 
    TextView refTextV; 

    Button buttonIAV; 
    Button buttonIRV; 
    ImageButton buttonIFV; 
} 

// Method to mark items in selection 
public void setSelectedAr(int position, boolean isSelected) { 
    selectionArrayAr.put(position, isSelected); 
} 

public void setSelectedRef(int position, boolean isSelected) { 
    selectionArrayRef.put(position, isSelected); 
} 
public void setSelectedF(int position, boolean isSelected) { 
    selectionArrayFav.put(position, isSelected); 
} 

UPDATE

나는 버튼을 클릭 부름을 받았다 내 기능이 로직을 추가했습니다. 당신이 기록/데이터를 업데이트하고 새 것으로 현재의 커서를 변경 얻을 수 있도록

Cursor todoCursor1 = hadDB.rawQuery("SELECT ID as _id, * FROM HAD_TABLE WHERE ID < 7001 ", null); 
     todoAdapter.changeCursor(todoCursor1); 

는 기본적으로, 당신은 그냥 DB를 다시 쿼리 할 필요가 todoCursor1 위 내 경우입니다.

또한 changeCursor()은 현재 커서를 닫습니다. 이전 커서로 돌아가려면 대신 swapCursor()을 사용해야합니다. 이전 커서를 반환하기 때문에.

이제 API 19 이상에서 작동하는지 알고 싶습니다.

+0

어댑터 코드를 게시 할 수 있습니까? 직접 수정하는 것이 훨씬 쉬울 것입니다. – fillobotto

+0

@fillobotto 코드를 게시하십시오. –

+0

'SimpleCursorAdapter'를 사용하는 이유는 무엇입니까? – pskink

답변

0

단추를 클릭 할 때 호출 된 내 기능에이 논리를 추가했습니다. 당신이 기록/데이터를 업데이트하고 새 것으로 현재의 커서를 변경 얻을 수 있도록

Cursor todoCursor1 = hadDB.rawQuery("SELECT ID as _id, * FROM HAD_TABLE WHERE ID < 7001 ", null); 
     todoAdapter.changeCursor(todoCursor1); 

는 기본적으로, 당신은 그냥 DB를 다시 쿼리 할 필요가 todoCursor1 위 내 경우입니다.

또한 changeCursor()은 현재 커서를 닫습니다. 이전 커서로 돌아가려면 대신 swapCursor()을 사용해야합니다. 이전 커서를 반환하기 때문에.

관련 문제