2016-03-30 20 views
0

Benim Custom list view benim paylaşılan tercihi var. Düğme üzerinde rakamları tutmak için kullanıyorum ama düğme 0 olduğunda satırın kaybolduğu bir durum var, ancak aşağı kaydırdığımda eski formuna döner ve kullanıcı için tekrar görünür hale gelir. SharedPreference'da aynı mantığı, son durumu korumak gibi uygulamak mümkün mü? onun daha okunabilir, böylecePaylaşılan Tercihler özel ListView'e uygulanabilir mi?

import static android.view.View.INVISIBLE; 

public class MainActivity extends Activity { 

    public MyAdapter adapter; 

    Context context; 

    public ListView list; 

    public int t[]; 

    public SharedPreferences prefs; 
    public SharedPreferences.Editor edit; 

    int [] btnNums={100,150,94,72,206,489,1481,731,131,91,145,137,662,770,196,351,258,131,180,1281}; 

    int[] images = {R.drawable.a1, R.drawable.a2, R.drawable.a3, R.drawable.a4, R.drawable.a5, R.drawable.a6, R.drawable.a7, R.drawable.a8, R.drawable.a9, 
      R.drawable.a10, R.drawable.a11, R.drawable.a12, R.drawable.a13, R.drawable.a14, R.drawable.a15, R.drawable.a16, R.drawable.a17, R.drawable.a18, R.drawable.a19, R.drawable.a20, R.drawable.a21}; 
    String[] exp; 
    String[] mean; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     edit= this.getSharedPreferences("NAME", Context.MODE_APPEND).edit(); 
     prefs = getSharedPreferences("NAME", Context.MODE_APPEND); 

     Resources res=getResources(); 
     exp= res.getStringArray(R.array.names); 
     mean=res.getStringArray(R.array.anlam); 
     list= (ListView) findViewById(R.id.listView); 


// 
//  edit.putInt("Count", btnNums.length); 
//  int count = 0; 
//  for (int i: btnNums){ 
//   edit.putInt("IntValue_" + count++, i); 
//  } 
//  edit.commit(); 
// 

     int[] ret; 


     int count1 = prefs.getInt("Count", 0); 
     ret = new int[count1]; 
     for (int i = 0; i < count1; i++){ 
      ret[i] =prefs.getInt("IntValue_"+ i, i); 

     } 

     t=ret; 

     if(t!=null) 
     { 
      adapter=new MyAdapter(this,exp,images,mean,t); 
     }else 
     { 
      adapter=new MyAdapter(this,exp,images,mean,btnNums); 
     } 

     list.setAdapter(adapter); 

     context=getApplicationContext(); 
    } 
} 

class MyAdapter extends ArrayAdapter<String>{ 

    int [] images; 
    String [] titleArray; 
    String [] descriptionArray; 
    int [] btnNums; 
    MainActivity ma; 

    public MyAdapter(MainActivity m, String[] titles, int imgs[], String[] descp, int[] btnNum){ 
     super(m, R.layout.single_row, R.id.textView,titles); 
     this.images=imgs; 
     this.titleArray=titles; 
     this.descriptionArray=descp; 
     btnNums=btnNum; 
     this.ma=m; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater= (LayoutInflater) ma.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     final View row=inflater.inflate(R.layout.single_row, parent, false); 

     final TextView myTitle=(TextView)row.findViewById(R.id.textView); 

     myTitle.findViewById(R.id.textView); 

     final TextView descp=(TextView)row.findViewById(R.id.textView2); 
     final ImageView imageView = (ImageView) row.findViewById(R.id.imageView); 
     final Button button = (Button) row.findViewById(R.id.angry_btn); 
     final Vibrator a = (Vibrator) ma.getSystemService(Context.VIBRATOR_SERVICE); 

     if(ma.t!=null) 
     { 
      for(int i=0; i<21;i++){ 
       button.setText("" + ma.t[position]); 
       imageView.setImageResource(images[position]); 
       myTitle.setText(titleArray[position]); 
       descp.setText(descriptionArray[position]); 
      } 
     }else 
     { 
      for(int i=0; i<21;i++){ 
       button.setText("" + btnNums[position]); 
       imageView.setImageResource(images[position]); 
       myTitle.setText(titleArray[position]); 
       descp.setText(descriptionArray[position]); 
      } 
     } 


     button.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       btnNums[position]--; 

       storeIntArray(btnNums); 

       a.vibrate(30); 
       if (btnNums[position] == 0) { 
        button.setEnabled(false); 
        button.setVisibility(INVISIBLE); 
        row.setVisibility(INVISIBLE); 

       } 

       int temp[]=getFromPrefs(); 
       ma.t=temp; 

       for (int i = 0; i < 21; i++) { 
        button.setText("" + temp[position]); 
        imageView.setImageResource(images[position]); 
        myTitle.setText(titleArray[position]); 
        descp.setText(descriptionArray[position]); 

       } 
      } 
     }); 

     return row; 

    } 

    @Override 
    public long getItemId(int position) { 

     return super.getItemId(position); 
    } 

    public void storeIntArray(int[] array){ 

     ma.edit.putInt("Count", array.length); 
     int count = 0; 
     for (int i: array){ 
      ma.edit.putInt("IntValue_" + count++, i); 
     } 
     ma.edit.commit(); 
    } 

    public int[] getFromPrefs(){ 

     int[] ret; 


     int count = ma.prefs.getInt("Count", 0); 
     ret = new int[count]; 
     for (int i = 0; i < count; i++){ 
      ret[i] =ma.prefs.getInt("IntValue_"+ i, i); 
     } 
     return ret; 
    } 

} 

cevap

0

Birincisi, biçimlendirmek lütfen kodu:

Kodum şudur.

Soru: Shared Preference özel ListView uygulanabilir mi?

Yanıt: Evet, Listview numaralı belgede paylaşılan tercihleri ​​kullanmak/erişmek mümkündür. Kodunuzu okuduktan sonra, sorunun Listview and its adapter uygulamanızda yattığına inanıyorum. Kaydırıldığında orijinal durumuna geri dönmesinin nedeni. Lütfen, kaydırma yaparken GetView numaralı telefonun çağrıldığını unutmayın. Bu konuya bakabilirsiniz: ListView & ViewHolder Pattern.

İlgili konular