2016-03-30 10 views
0

私はアンドロイドとアンドロイドのビューを全体としてリストするのはかなり新しいです。私が現在直面している問題は、リストの各項目にトグルボタンを表示していることです。このトグルは、サーバーから読み取る内容に応じてオンまたはオフに変更されます。リストビューでトグルボタンを使ってデータを送信する方法android

私の問題は、ボタンの新しいステータスとデバイスIDを送信するリストビューアイテムのそれぞれについて、そのトグルボタンをクリック可能にする方法または開始位置をわからないことですアイデアはライトをオンまたはオフにすることです)

私は以下のコードを投稿します。私は約1週間これに固執していて、それは私のナッツを運転している!

これは、ビュー

package mmu.tom.linkedviewproject; 

import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.ImageButton; 
import android.widget.ListView; 

import org.json.JSONArray; 

public class MainActivity extends AppCompatActivity { 
    private static final String TAG = "ShowDevice"; 
    private ListView GetAllDevicesListView; 
    private JSONArray jsonArray; 

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

     Log.i(TAG, " OPened this"); 

     ImageButton button1 = (ImageButton) findViewById(R.id.image_button_new); 

     button1.setOnClickListener(new View.OnClickListener() { 
      Class ourClass; 

      public void onClick(View v) { 
       Intent i; 
       i = new Intent(MainActivity.this, DeviceDetailsActivity.class); 
       startActivity(i); 
      } 
     }); 
    } 

    public void setListAdapter(JSONArray jsonArray) { 
     this.jsonArray = jsonArray; 
     this.GetAllDevicesListView.setAdapter((new GetAllDeviceListViewAdapter(jsonArray, this))); 
    } 

    private class GetAllDevicesTask extends AsyncTask<ApiConnector,Long,JSONArray> { 
     @Override 
     protected JSONArray doInBackground(ApiConnector... params) { 
      // it is executed on Background thread 
      return params[0].GetAllDevicesState(); 
     } 

     @Override 
     protected void onPostExecute(JSONArray jsonArray) { 
     setListAdapter(jsonArray); 
     } 
    } 
} 

に入れる項目のJSONarrayを引っ張ると私は設定して、アイテムを見て、基本的に私のリストビューのアダプタであるだろうどのように作成する場所これは私の主な活動です。

package mmu.tom.linkedviewproject; 

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.ToggleButton; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

/** 
* Created by Tom on 08/02/2016. 
*/ 

public class GetAllDeviceListViewAdapter extends BaseAdapter { 
    private JSONArray dataArray; 
    private Activity activity; 
    private String state; 

    private static LayoutInflater inflater = null; 

    public GetAllDeviceListViewAdapter(JSONArray jsonArray, Activity a) { 
     this.dataArray = jsonArray; 
     this.activity = a; 
     inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     return this.dataArray.length(); 
    } 

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // set up the convert view if it's null 
     ListCell cell; 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.get_all_devices_list_view_cell,null); 
      cell = new ListCell(); 
      cell.deviceName = (TextView) convertView.findViewById(R.id.device_name); 
      cell.deviceId = (TextView) convertView.findViewById(R.id.device_id); 
      cell.type = (TextView) convertView.findViewById(R.id.type); 
      cell.toggleButton = (ToggleButton) convertView.findViewById(R.id.toggleButton); 
      cell.typeImg = (ImageView) convertView.findViewById(R.id.device_type); 
      convertView.setTag(cell); 
     } else { 
      cell = (ListCell) convertView.getTag(); 
     } 

     // changes the cell data here 

     try { 
      JSONObject jsonObject = this.dataArray.getJSONObject(position); 
      cell.deviceName.setText(jsonObject.getString("name")); 
      cell.deviceId.setText(" " + jsonObject.getString("deviceID")); 
      cell.type.setText(" " + jsonObject.getString("type")); 

      String toggle = jsonObject.getString("currentState"); 
      if (toggle.equals("on")) { 
       cell.toggleButton.setChecked(true); 
      } else { 
       cell.toggleButton.setChecked(false); 
      } 

      String device = jsonObject.getString("type"); 
      if (device.equals("Light")) { 
       cell.typeImg.setImageResource(R.mipmap.ic_lights_on); 
      } else if (device.equals("Lock")) { 
       cell.typeImg.setImageResource(R.mipmap.ic_lock_open_black_24dp); 
      } 
      // remember to set the image to type in future 
     } catch(JSONException e) { 
      e.printStackTrace(); 
     } 

     return convertView; 
    } 

    private class ListCell { 
     private TextView deviceName; 
     private TextView deviceId; 
     private TextView type; 
     private ImageView typeImg; 
     private ToggleButton toggleButton; 
    } 
} 

答えて

0

私が理解する限り、あなたはこれを探しています。

+0

私は数回見ましたが、どこに行くのか分かりません。私はリストビューアダプターに入れようとしましたが、奇妙なエラーが発生します。 – Tfish

+0

あなたはアダプターのgetView()メソッドの中に入れなければなりません。 –

+0

のどの部分が残っているのかを教えてください。 – Tfish

関連する問題