Враховуючи ListView нижче, я хотів виконати дварізні дії залежно від того, вибирає користувач текст (створює нову діяльність) або клацає відповідний прапорець (додає його до списку обраного). Чи можливо це при цій установці, чи мені доведеться використовувати спеціальний адаптер чи навіть інший макет?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, teams));
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String team_name = adapterView.getItemAtPosition(i).toString().trim();
Intent intent = new Intent("blah.blah.blah");
intent.putExtra("team", team_name);
startActivity(intent);
}
});
А.
Відповіді:
0 для відповіді № 1Якщо я вас правильно розумію, ваш ListView повинен містити TextBox і CheckBox, а TextBox і CheckBox можна натискати, а не сам ListView.
Для цього вам потрібно зробити спеціальний адаптер, де ви будете робити прослуховувачі як для TextBox, так і для CheckBox.
public class CustomAdapter extends BaseAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// your_costum_view should contain textbox and checkboc
view = inflater.inflate(R.layout.your_costum_view, null);
// Get your checkbox and textbox and add listeners
TextView textView = (TextView) view.findById(R.id.textView);
textView.setOnClickListener...
Checkbox checkbox=(CheckBox)view.findById(R.id.checkBox);
checkBox.setOnClickListener...
return view;
}
}
приклад макета your_costum_view
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
0 для відповіді № 2
Використання спеціального адаптера допоможе вам відстежувати ваші уявлення, це буде простіше, ніж використання адаптера за замовчуванням, який ви не можете контролювати. Для довідок: http://www.vogella.com/tutorials/AndroidListView/article.html#adapterown_custom
0 для відповіді № 3
Використання спеціального адаптера, безумовно, полегшить вам життя. В адаптері ви можете зробити посилання як на прапорець, так і на textView та додати onClick
Слухач кожного - звідти ви також можете додатикод для обробки кожної події. Я б також запропонував використовувати recyclerView замість ListView. Це нова річ в Android 5.0, і вона дійсно простіша у використанні, ніж звичайний ListView. Сподіваюся, це допоможе:
Довідка RecyclerView
0 для відповіді № 4
Встановіть CheckBox як focusable = "false" у своєму XML-макеті.
android:focusable="false"
якщо не біжи, йди на це посилання і див. приклад, тому що вам потрібно створити власний рядок у поданні списку та встановити:
Checkbox checkbox=(CheckBox)view.findById(R.id.checkboxID);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//do stuff
}
});