0

Я создал собственный список ListView, в котором перечислены все установленные приложения на устройстве, в этом списке представлены значок приложения, имя приложения и флажок. Я хочу закодировать метод onCheckboxClicked, но я не знаю, где его разместить, я прочитал, что он должен быть внутри адаптера, но другие примеры, которые я просматривал, имеют код в основном действии, и я не могу показаться заставить его работать в любом случае.как скопировать флажки, созданные в пользовательском listview

public class MainActivity extends ActionBarActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //retrieve currently installed apps 
    final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
    final List pkgAppsList = getPackageManager().queryIntentActivities(mainIntent, 0); 
    List<AppDetails> appList = new ArrayList<>(); 

    for (Object object : pkgAppsList) 
    { 
     ResolveInfo info = (ResolveInfo) object; 
     Drawable icon = getBaseContext().getPackageManager().getApplicationIcon(info.activityInfo.applicationInfo); 
     String strAppName = info.activityInfo.applicationInfo.publicSourceDir.toString(); 
     String strPackageName = info.activityInfo.applicationInfo.packageName.toString(); 
     final String title = (String)((info != null) ? getBaseContext().getPackageManager().getApplicationLabel(info.activityInfo.applicationInfo) : "???"); 
     AppDetails tmp = new AppDetails(title, icon); 
     appList.add(tmp); //add title and icon into list 
    } 


    final ListView listview = (ListView) findViewById(R.id.listView); 
    final AppDetailsAdapter adapter = new AppDetailsAdapter(this, appList); 
    listview.setAdapter(adapter); 

} 

адаптер:

public class AppDetailsAdapter extends BaseAdapter { 

private List<AppDetails> data; 
private Context context; 

public AppDetailsAdapter(Context context, List<AppDetails> data) { 
    this.context = context; 
    this.data = data; 
} 

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

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

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

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

    if (view == null) { 
     LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = vi.inflate(R.layout.custom_row_layout, null); 
    } 


    ImageView icon = (ImageView) view.findViewById(R.id.icon); 
    TextView text = (TextView) view.findViewById(R.id.text); 

    final AppDetails item = data.get(position); 

    text.setText(item.name); 
    icon.setImageDrawable(item.icon); 


    return view; 
} 

}

пользовательский макет:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="60dp" 

android:clickable="true" 
android:orientation="horizontal" 
android:weightSum="1"> 

<ImageView 
    android:id="@+id/icon" 
    android:layout_width="39dp" 
    android:layout_height="39dp" 
    android:layout_gravity="center_vertical" 
    android:layout_marginLeft="16dp" /> 

<TextView 
    android:id="@+id/text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_gravity="center_vertical" 
    android:layout_marginLeft="16dp" 
    android:textSize="17sp" /> 
<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="right" > 

    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/checkBox" 
     android:onClick="onCheckboxClicked"/>/> 


</LinearLayout> 

Я также читал, что метод GetView должен быть изменен для обработки флажок, но опять я не могу сделать это с тем, что я пытался до сих пор

+0

Поиск кнопки в ListView. Флажок будет аналогичным. – JonasCz

ответ

0

Заменить код вида ПОЛУЧИТЬ адаптеров с кодом ниже:

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

    if (view == null) { 
     LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = vi.inflate(R.layout.custom_row_layout, null); 
    } 


    ImageView icon = (ImageView) view.findViewById(R.id.icon); 
    TextView text = (TextView) view.findViewById(R.id.text); 

CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox); 

    final AppDetails item = data.get(position); 

    text.setText(item.name); 
    icon.setImageDrawable(item.icon); 

    checkBox .setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       // Handle your conditions here 

      } 
     }); 


    return view; 
} 

здесь setOnCheckedChangeListener является метод, который вы должны справиться.

+0

«Андроид перестает работать», когда я проверяю флажок, не уверен, что я сделал неправильно – user3343264

+0

что такое исключение, и, пожалуйста, проверьте, что в вашем классе адаптера вы добавляете флажок и правильно находите его id – theLazyFinder

+0

Это была проблема в моем XML-файле, но теперь это прекрасно работает, спасибо. Проблема, которую я сейчас имею в том, что если я прокрутку случайных флажков будет галочкой и отключаться, я думаю, что смогу исследовать это – user3343264

Смежные вопросы