0

Ich versuche, eine Listenansicht, in der jedes Element hat zwei Dinge, eine Beschreibung in Textansicht und eine Umschaltfläche. Die Details in der Textansicht werden von der AsyncTask dynamisch geladen. Am Ende der Listenansicht habe ich programmatisch eine Schaltfläche eingefügt. Wenn diese Schaltfläche angeklickt wird, muss ich die Daten in allen Textansichten und den Status aller ToggleButtons abrufen. Dies ist der Code, den ich verwendet habe:Get Zustand von Toggle Button in Android

XML-Datei

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#dfdede" 
android:focusable="true" 
android:focusableInTouchMode="false"> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="30dp" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:layout_marginLeft="10dp" 
    android:layout_marginTop="15dp" 
    android:textColor="#000000" 
    android:textSize="20dp" /> 

<ToggleButton 
    android:id="@+id/toggle1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:checked="true" 
    android:text="ToggleButton" /> 

<View 
    android:layout_width="fill_parent" 
    android:layout_height="2dp" 
    android:layout_alignBottom="@id/textView1" 
    android:background="#49656565" /> 

public class MarkAttendance extends ListActivity { 

String url = "http://192.168.173.1:8080/WebApplication1/androidrollsheet.jsp"; 
String pid = ""; 
ArrayList<String> array = new ArrayList<String>(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    pid = getIntent().getStringExtra("pid"); 
    new LoadRollSheet().execute(); 

    final ListView lv = getListView(); 
    Button submitButton = new Button(this); 
    submitButton.setText("Submit"); 
    lv.addFooterView(submitButton); 

    submitButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      ListAdapter adapter = lv.getAdapter(); 
      int total = adapter.getCount() - 1; 
      for (int i = 0; i < total; i++) { 
       View rowview = adapter.getView(i, null, lv); 
       TextView textView = (TextView) rowview.findViewById(R.id.textView1); 
       ToggleButton toggle1 = (ToggleButton) rowview.findViewById(R.id.toggle1); 
       String studentDetails = textView.getText().toString(); 
       String value = String.valueOf(toggle1.getText()); 
       Log.i("VALUE ???? ", value); 
      } 
     } 
    }); 
} 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    String item = (String) getListAdapter().getItem(position); 
    Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_mark_attendance, menu); 
    return true; 
} 

private ProgressDialog pDialog; 

class LoadRollSheet extends AsyncTask<String, String, String> { 
    /** 
    * Before starting background thread Show Progress Dialog 
    */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(MarkAttendance.this); 
     pDialog.setMessage("Loading products. Please wait..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    protected String doInBackground(String... args) { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("pid", pid)); 
     // getting JSON string from URL 
     JSONParser jParser = new JSONParser(); 
     JSONObject json = jParser.makeHttpRequest(url, "GET", params); 
     // Check your log cat for JSON reponse 
     Log.d("All Entries: ", json.toString()); 
     //getting Sections array from JSON object 
     JSONArray rollSheet = null; 
     try { 
      rollSheet = json.getJSONArray("RollSheet"); 
      //looping through all sections 
      for (int i = 0; i < rollSheet.length(); i++) { 
       JSONObject entry = rollSheet.getJSONObject(i); 
       int rollNo = entry.getInt("rollNo"); 
       int userId = entry.getInt("userId"); 
       String studentName = entry.getString("studentName"); 

       String value = rollNo + " " + studentName; 
       array.add(value); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    **/ 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog after getting all products 
     pDialog.dismiss(); 
     // updating UI from Background Thread 
     runOnUiThread(new Runnable() { 
      public void run() { 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.activity_mark_attendance, R.id.textView1, array); 
       setListAdapter(adapter); 
       ((BaseAdapter) getListAdapter()).notifyDataSetChanged(); 
      } 
     }); 
    } 
} 

}

Aber das Problem ist, dass ich in der Lage bin, richtig die Zeichenfolge im bekommen Textansichten, aber nicht der Status der Umschaltfläche. Es ist immer der Standardstatus, der in diesem Fall aktiviert ist. Jede mögliche Hilfe bei diesem wird sehr schön sein :(

+0

Warum setzen Sie kein separates Flag, das sich ändert, wenn sich der Status der Schaltfläche ändert? – durbnpoisn

+0

Eigentlich weiß ich nicht Wie viele Umschalttasten angezeigt werden, hängt ganz von der Anzahl der Einträge ab, die ich vom JSON-Objekt –

+0

@durbnpoisn any pointers? –

Antwort

0

Ich glaube, Sie isChecked() verwenden können, können Sie nicht

EDIT: Ein weiterer Versuch, funktionierts (?):

ToggleButton toggle = (ToggleButton)findViewById(R.id.toggle); 
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     Log.e(TAG, String.valueOf(isChecked)); 
    } 
}); 
+0

erhalte Ich habe versucht, das zu verwenden, aber es gibt den gleichen Wert für alle toggle-tasten die gleichen wie die getText() –

+0

bearbeitet meine antwort –

+0

Ich werde nur überprüfen und kommen –