2016-02-15 13 views
-2

'公共類AttendanceActivity延伸活動{如何保存在Android的ListView中的TextView的內容,同時滾動

TextView rollNo, name, attendance,attendance1,tv; 
SqliteDBHelper db; 
private List<Student> studentlist; 
private List<Attendance>Attendancelist,attendancelist; 
private String status; 
ImageView iv; 

ArrayList<String> mannschaftsnamen = new ArrayList<String>(); 
ArrayList<String> namelsist = new ArrayList<String>(); 
ArrayList<Integer> idintegr= new ArrayList<Integer>(); 
List<NameBean> beanList=new ArrayList<NameBean>(); 
BaseAdapter myAdapter = new BaseAdapter() { 

    class ViewHolder { 
     TextView rollNo; 
     TextView name; 
     TextView attendance; 
     TextView tv; 

     } 


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

     final ViewHolder viewHolder; 




     if(convertView==null){ 

      // inflate the layout 
      LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.attendance_layout, parent, false); 

      viewHolder = new ViewHolder(); 
      viewHolder.rollNo = (TextView) convertView.findViewById(R.id.rollNoTxtView); 
      viewHolder.name = (TextView) convertView.findViewById(R.id.nameTxtView); 
      viewHolder.attendance = (TextView) convertView.findViewById(R.id.attendanceTxtView); 


      // store the holder with the view. 
      convertView.setTag(viewHolder); 

     }else{ 

      viewHolder = (ViewHolder) convertView.getTag(); 
     } 



     if(convertView != null) { 


      viewHolder.name.setText(studentlist.get(position).getStname()); 
      viewHolder.rollNo.setText(Integer.toString(studentlist.get(position).getSregno())); 

      //viewHolder.attendance.setText(status); 
      viewHolder.attendance.setText("P"); 

      viewHolder.attendance.setBackgroundColor(Color.rgb(12, 107, 12)); 



         } 

     return convertView; 

    } 




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

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

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

ListView list; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_attendance); 
    tv = (TextView) findViewById(R.id.date); 
    Calendar c = Calendar.getInstance(); 

    SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy"); 
    final String formattedDate = df.format(c.getTime()); 
    // Now formattedDate have current date/time 
    //  Toast.makeText(getApplicationContext(), formattedDate, Toast.LENGTH_SHORT).show(); 

    tv.setText(formattedDate); 

    TextView columnHeader1 = (TextView) findViewById(R.id.column_header1); 
    TextView columnHeader2 = (TextView) findViewById(R.id.column_header2); 
    TextView columnHeader3 = (TextView) findViewById(R.id.column_header3); 
    TextView sub=(TextView) findViewById(R.id.subname); 
    iv=(ImageView) findViewById(R.id.home); 
    columnHeader1.setText("Regno"); 
    columnHeader2.setText("Name"); 
    columnHeader3.setText("Attendance"); 
    db = new SqliteDBHelper(this); 
    int value2 = getIntent().getIntExtra("uidr",0); 
    String subname=getIntent().getStringExtra("subname"); 
    sub.setText(subname); 
    studentlist=db.getStudentName(value2); 
    //String name1=db.getStudentName1(value2); 
    //Attendancelist=db.getAttendanceDetail(name1); 
    list = (ListView) findViewById(R.id.listView1); 


    list.setAdapter(myAdapter); 
    iv.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      onBackPressed(); 
     } 
    }); 
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> adapter, final View view, final int position, 
       long arg3) { 
      // TODO Auto-generated method stub 

      TextView tv = ((TextView) view 
        .findViewById(R.id.attendanceTxtView)); 



      Log.d("textview", "text" +tv.getText()); 
      if(tv.getText().toString().equals("P")) 
      { 
       tv.setText("A"); 
      // tv.setTextColor(Color.rgb(200,0,0)); 
       tv.setBackgroundColor(Color.rgb(200, 0, 0)); 
      } 
      else 
      { 
       tv.setText("P"); 
      // tv.setTextColor(Color.rgb(12,107,12)); 
       tv.setBackgroundColor(Color.rgb(12, 107, 12)); 
      } 
      String attendance1 = ((TextView) view.findViewById(R.id.attendanceTxtView)).getText().toString(); 
      int id= Integer.valueOf(((TextView) view.findViewById(R.id.rollNoTxtView)).getText().toString()); 

     db.updatedetails(attendance1,id); 
      // String message = view.findViewById(R.id.attendanceTxtView).gett().toString(); 
      // Toast.makeText(Activityname.this, message, Toast.LENGTH_SHORT).show(); 
      ImageButton confirm = (ImageButton)findViewById(R.id.confirm); 
      confirm.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        // TODO Auto-generated method stub 
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(AttendanceActivity.this); 

        // Setting Dialog Title 
        alertDialog.setTitle("Please verify the attendance"); 

        // Setting Dialog Message 
        alertDialog.setMessage("Have you confirmed "); 

        // Setting Icon to Dialog 
        /* alertDialog.setIcon(R.drawable.delete);*/ 

        // Setting Positive "Yes" Button 
        alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog,int which) { 

          TextView tv; 
           View view; 
          for (int i = 0; i <= list.getLastVisiblePosition() - list.getFirstVisiblePosition(); i++) 
          { 

           tv = (TextView) list.getChildAt(i).findViewById(R.id.attendanceTxtView); 
           int id= Integer.valueOf(((TextView) list.getChildAt(i).findViewById(R.id.rollNoTxtView)).getText().toString()); 

            String name1=((TextView) list.getChildAt(i).findViewById(R.id.nameTxtView)).getText().toString(); 
            if (tv!=null) { 
            mannschaftsnamen.add(String.valueOf(tv.getText())); 
            idintegr.add(id); 
            namelsist.add(name1); 

            Log.e("ypgs", String.valueOf(tv.getText())); 
            Log.e("ypgs","" + id); 
            Log.e("ypgs", name1); 

          } 
          } 

          for(int i=0;i<namelsist.size();i++) 
          { 
           Log.e("ypgsinaloop", namelsist.get(i)); 
          } 
          db.insertdetails1(namelsist,idintegr,mannschaftsnamen); 




         } 

        }); 

        // Setting Negative "NO" Button 
        alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          // Write your code here to invoke NO event 
          Toast.makeText(getApplicationContext(), "ok,please verify again..", Toast.LENGTH_SHORT).show(); 
          dialog.cancel(); 
         } 
        }); 

        // Showing Alert Message 
        alertDialog.show(); 
       } 
      }); 




     } 
    }); 


} 

} `我有列表項與TextView的在裏面,我有當我點擊「P問題「它變成了」A「,但是當我從頭到尾再次滾動時,當我到達最高位時,它變成」P「。

請參考我的形象理解我的問題

enter image description here

+0

我沒有找到任何圖片@alokraj。請提供。 – Rahul

+0

現在我附上image.please幫助我,如果你知道 – alokraj

+0

請在這裏提供你的適配器代碼。 – Rahul

回答

0

你應該根據位置的值存儲在一個數組:

public static final ArrayList<String> changed_keys = new ArrayList<>(); 

,然後在適配器中getView方法檢查:

if(array.get(position).equals("p")) 
{ 
    textView.setText("p"); 
} 
else 
{ 
    textView.setText("a"); 
} 
-1

列表視圖項目在滾動時會不斷銷燬並重新創建。你需要做的是在創建時保存每個項目的狀態,並在你再次處於該位置時重新使用它。

編輯: 在適配器中的getView方法,你可以做這樣的事情:

String[] stringStateList; 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

//inflate convertView 
     TextView textView = (TextView) convertView.findViewById(R.id.textview); 
     textView.setText(stringStateList[position]); 

      return convetView; 
     } 

在這裏你可以填寫你的stateList在適配器的構造函數,或者你可以使用地圖來代替。

而在你onItemClickListener:

stringStateList[position]=textView.getText.Tostring(); 
+0

是的,你可以提供一些示例或示例代碼@ pedif – alokraj

+0

任何人都可以請幫助我。 – alokraj

+0

好的@pedif。我嘗試着 。 – alokraj

0

OnItemClick,更改ArrayList的價值也與TextView的更新用,並 改變後,

呼叫adapter.notifyDataStateChanged();方法

在適配器繼續檢查這種情況。

if(array.get(position).equals("p")) 
    { 
     textView.setText("p"); 
    } 
    else 
    { 
     textView.setText("a"); 
    } 

希望它會幫助你的!

+0

好的,我會嘗試@rahul – alokraj

+0

爲什麼我們需要檢查條件@ @ rahul – alokraj

+0

因爲在點擊listitem之後,你在TextView中進行了修改,同時你需要對你的ArrayList進行修改,之後你需要調用adapter.notifyDataStateChanged()方法,所以在那一刻,再次通知適配器,所以顯示在屏幕上的數據將被更新..這就是爲什麼你需要檢查條件,所以無論何時listview滾動,它會自動採取更新值來自ArrayList! – Rahul

相關問題