1

맞춤 어댑터가있는 ListView에 다음 코드를 사용했습니다. 이 코드는 나를 위해 잘 작동합니다Android : 주 활동 버튼에서 listview에 선택된 체크 박스를 선택하십시오.

ListView에는 모든 ListView 행에 하나의 확인란, TextView, ImageView 및 Button이 있습니다. HttpPost 메서드를 통해 데이터를 가져오고 listview의 모든 행에 아무런 문제가 없습니다.

나는 listview에서 체크 된 모든 체크 박스를 얻고 싶습니다. 메인 활동 버튼을 클릭하십시오.

많은 기사와 예제를 읽었지만 적절한 답을 얻을 수 없었습니다.

코드 : MainActivity.java 버튼을 클릭하고 토스트를 "버튼을 클릭"하는 파일.

package com.example.listviewimageloadingexample; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

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

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements OnClickListener { 

    // Declare Variables 
    JSONObject jsonobject; 
    JSONArray jsonarray; 
    ListView listview; 
    ListViewAdapter adapter; 
    ProgressDialog mProgressDialog; 
    ArrayList<HashMap<String, String>> arraylist; 

    static String RANK = "rank"; 
    static String COUNTRY = "country"; 
    static String POPULATION = "population"; 
    static String FLAG = "flag"; 
    Button processedAllBtn; 
    CheckBox processAll; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     // Get the view from listview_main.xml 
     setContentView(R.layout.listview_main); 

     processedAllBtn=(Button) findViewById(R.id.btnProcessedAllAbove); 
     processedAllBtn.setOnClickListener(this); 

     // Locate the listview in listview_main.xml 
     listview = (ListView) findViewById(R.id.listview); 

     Object obj=(ListViewAdapter)getLastNonConfigurationInstance(); 
     if(obj==null) 
     { 
      // Execute DownloadJSON AsyncTask 
      new DownloadJSON().execute(); 
     } 
     else 
     { 
      adapter=(ListViewAdapter)obj; 
      setListView(); 
     } 
    } 

    @Override 
    public void onClick(View arg0) { 
     switch(arg0.getId()) 
     { 
      case R.id.btnProcessedAllAbove: 
      //Toast.makeText(getApplicationContext(), "button is clicked "+arg0.getId(), Toast.LENGTH_SHORT).show(); 

      break; 
     } 
    } 

    // DownloadJSON AsyncTask 
    private class DownloadJSON extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 

     super.onPreExecute(); 

     // Create a progressdialog 
     mProgressDialog = new ProgressDialog(MainActivity.this); 

     // Set progressdialog title 
     mProgressDialog.setTitle("Android JSON Parse Tutorial"); 

     // Set progressdialog message 
     mProgressDialog.setMessage("Loading..."); 
     mProgressDialog.setIndeterminate(false); 

     // Show progressdialog 
     mProgressDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     // Create an array 
     arraylist = new ArrayList<HashMap<String, String>>(); 

     // Retrieve JSON Objects from the given URL address 
     jsonobject = JSONfunctions.getJSONfromURL("WEBSERVICE_URL"); 

     try { 
      // Locate the array name in JSON 
      //jsonarray = jsonobject.getJSONArray("worldpopulation"); 
      jsonarray = jsonobject.getJSONArray("students"); 
      String flag=""; 

      for (int i = 0; i < jsonarray.length(); i++) { 
       HashMap<String, String> map = new HashMap<String, String>(); 
       JSONObject jsonobject = jsonarray.getJSONObject(i); 

       JSONObject student_object = jsonobject.getJSONObject("students"); 

       // Retrive JSON Objects 
       map.put("rank", student_object.getString("id")); 
       map.put("country", student_object.getString("name")); 
       map.put("population", student_object.getString("roll_number")); 

       flag = student_object.getString("student_photo"); 
       flag = flag.replace(" ", "%20"); 

       map.put("flag", "WEBSERVICE_URL"+flag); 
       // Set the JSON Objects into the array 
       arraylist.add(map); 
      } 
     } catch (JSONException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void args) { 

     setListView(); 

     // Close the progressdialog 
     mProgressDialog.dismiss(); 
    } 
} 

@Override 
public Object onRetainNonConfigurationInstance() { 
    return adapter; 
} 

public void setListView() 
{ 
    if(adapter==null) 
    { 
     // Pass the results into ListViewAdapter.java 
     adapter = new ListViewAdapter(MainActivity.this, arraylist); 
    } 

    // Set the adapter to the ListView 
    listview.setAdapter(adapter); 
} 
} 

코드 : listitem.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <CheckBox 
      android:id="@+id/processedCheckBox" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:saveEnabled="false" /> 

     <ImageView 
      android:id="@+id/flag" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:padding="5dp"/> 

     <TextView 
      android:id="@+id/rank" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:text="id" 
      android:textStyle="bold" 
      android:visibility="gone" /> 

     <TextView 
      android:id="@+id/country" 
      android:layout_width="100dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:text="Name" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/population" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:text="Roll_No" 
      android:textStyle="bold" 
      android:visibility="gone" /> 

     <Button 
      android:id="@+id/btnProcessed" 
      android:layout_width="90dp" 
      android:layout_height="30dp" 
      android:textSize="15sp" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:background="@drawable/buttonshape" 
      android:text="Processed" 
      android:textColor="#FFFFFF" 
      android:layout_marginLeft="2dp" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <View 
      android:layout_width="fill_parent" 
      android:layout_height="1dp" 
      android:background="#000000" /> 

    </LinearLayout> 

</LinearLayout> 

코드에 대한 : listview_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ScrollView1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" > 

      <CheckBox 
       android:id="@+id/checkAllAbove" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Select All" /> 

      <Button 
       android:id="@+id/btnProcessedAllAbove" 
       android:layout_width="90dp" 
       android:layout_height="30dp" 
       android:layout_marginLeft="119dp" 
       android:background="@drawable/buttonshape" 
       android:text="Processed" 
       android:textColor="#FFFFFF" 
       android:textSize="15sp" /> 

     </LinearLayout> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:background="#000000" /> 

     <ListView 
      android:id="@+id/listview" 
      android:layout_width="match_parent" 
      android:layout_height="320dp" /> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:background="#000000" /> 

    </LinearLayout> 

</ScrollView> 
,691,363 ListAdapter에 대한

package com.example.listviewimageloadingexample; 

import java.util.ArrayList; 
import java.util.HashMap; 

import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class ListViewAdapter extends BaseAdapter { 

    // Declare Variables 
    Context context; 
    LayoutInflater inflater; 
    ArrayList<HashMap<String, String>> data; 
    ImageLoader imageLoader; 
    HashMap<String, String> resultp = new HashMap<String, String>(); 
    boolean[] itemChecked; 

    public ListViewAdapter(Context context, ArrayList<HashMap<String, String>> arraylist) 
    { 
     super(); 
     this.context = context; 
     data = arraylist; 
     imageLoader = new ImageLoader(context); 
     itemChecked = new boolean[data.size()]; 
    } 

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

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

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

    public class ViewHolder 
    { 
     TextView rank; 
     TextView country; 
     TextView population; 
     Button processedBtn; 
     ImageView flag; 
     CheckBox processedCheckBox; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     View view=convertView; 
     final ViewHolder viewHolder; 
     LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if(view == null) 
     { 

      view = inflater.inflate(R.layout.listview_item, null); 

      viewHolder= new ViewHolder(); 

      // Locate the TextViews in listview_item.xml 
      viewHolder.rank = (TextView) view.findViewById(R.id.rank); 
      viewHolder.country = (TextView) view.findViewById(R.id.country); 
      viewHolder.population = (TextView) view.findViewById(R.id.population); 

      // Locate the ImageView in listview_item.xml 
      viewHolder.flag = (ImageView) view.findViewById(R.id.flag); 

      viewHolder.processedBtn = (Button) view.findViewById(R.id.btnProcessed); 
      viewHolder.processedCheckBox = (CheckBox)view.findViewById(R.id.processedCheckBox); 

      view.setTag(viewHolder); 
     } 
     else 
     { 
      viewHolder=(ViewHolder)view.getTag(); 
     } 

     // Get the position 
     resultp = data.get(position); 

     // Capture position and set results to the TextViews 
     viewHolder.rank.setText(resultp.get(MainActivity.RANK)); 
     viewHolder.country.setText(resultp.get(MainActivity.COUNTRY)); 
     viewHolder.population.setText(resultp.get(MainActivity.POPULATION)); 

     // Capture position and set results to the ImageView 
     // Passes flag images URL into ImageLoader.class 
     imageLoader.DisplayImage(resultp.get(MainActivity.FLAG), viewHolder.flag); 

     viewHolder.processedBtn.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 

      // Get the position 
      resultp = data.get(position); 

      Intent intent = new Intent(context, SingleItemView.class); 

      // Pass all data rank 
      intent.putExtra("rank", resultp.get(MainActivity.RANK)); 

      // Pass all data country 
      intent.putExtra("country", resultp.get(MainActivity.COUNTRY)); 

      // Pass all data population 
      intent.putExtra("population",resultp.get(MainActivity.POPULATION)); 

      // Pass all data flag 
      intent.putExtra("flag", resultp.get(MainActivity.FLAG)); 

      // Start SingleItemView Class 
      context.startActivity(intent); 
     } 
    }); 

    viewHolder.processedCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
    { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      // TODO Auto-generated method stub 

      itemChecked[position]=(!itemChecked[position]); 
      viewHolder.processedCheckBox.setChecked(itemChecked[position]); 
     } 
     }); 
     return view; 
    } 
} 

코드 파일 된 .java (210)

답변

2

모두에게 감사드립니다.

답변 있음. Link. 다음 코드는 listview에서 모든 개체를 가져옵니다.

... 
@Override 
public void onClick(View arg0) 
{ 
    CheckBox cb; 
    for (int x = 0; x <listview.getChildCount();x++) 
    { 
     TextView tvRank=(TextView)listview.getChildAt(x).findViewById(R.id.rank); 
     TextView tvCountry=(TextView)listview.getChildAt(x).findViewById(R.id.country); 
     TextView tvPopulation=(TextView)listview.getChildAt(x).findViewById(R.id.population); 

     String rank=tvId.getText().toString(); 
     String country=tvName.getText().toString(); 
     String population=tvRno.getText().toString(); 

     cb = (CheckBox)listview.getChildAt(x).findViewById(R.id.processedCheckBox); 
     if(cb.isChecked()) 
     { 
      Toast.makeText(getApplicationContext(),rank+"-"+country+"-"+population, Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 
+0

이것은 다른 (정확한) 솔루션과 비교해 정말 느립니다. – brummfondel

관련 문제