Новое в Android-программировании и проблема с программированием приложения с действиями для списка дел, журнала времени, журнала затрат и журнала упражнений. Каждое действие представляет собой список с несколькими вариантами выбора. Например:Список дел на Android
TO-DO: Это одностраничный список дел. Пользователь не может добавлять дополнительные страницы списка дел. Поэтому экран выглядит пустым с двумя кнопками внизу: ADD и DELETE. Пользователь будет использовать кнопку «Назад назад» для выхода из этой операции и возврата к основному представлению. Вы должны предоставить хороший фон для этого списка дел, который хорошо работает с темой этой функции и не слишком «шумно», чтобы посмотреть. Вы должны использовать представление списка, которое доступно для прокрутки. Каждая запись должна предоставить пользователю возможность пометить его как завершенную. Кнопка ADD отображает всплывающее текстовое поле для ввода пользователем своего предмета. Всплывающее окно имеет кнопку DONE и CANCEL. Нажатие DONE добавляет элемент списка дел в конец списка дел. Нажатие CANCEL возвращает пользователя в список дел, но не добавляет текст из всплывающего окна.
Мне нужно использовать фрагменты, но у вас возникли проблемы с пониманием того, как запрограммировать ListFragment, который будет привязан ко всем действиям.
К-DO активность:
public class ToDoActivity extends Activity implements ListViewFragment.OnItemSelectedListener {
final Context context = this;
private ArrayAdapter<String> adapter;
private ArrayList<String> arrayList = new ArrayList<>();
private ListView toDoList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.todo);
// SET ACTION BAR
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_multiple_choice, arrayList);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public void onButtonItemSelected(String link) {
if (link.contentEquals("add")) {
final Dialog dialog = new Dialog(context);
LayoutInflater inflater = getLayoutInflater();
dialog.setContentView(inflater.inflate(R.layout.todo_dialog, null));
dialog.setTitle("Add Task");
dialog.show();
final EditText task = (EditText) dialog.findViewById(R.id.etTaskInfo);
Button btDone = (Button) dialog.findViewById(R.id.btDone);
btDone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
arrayList.add(task.getText().toString());
adapter.notifyDataSetChanged();
dialog.dismiss();
}
});
Button btCancel = (Button) dialog.findViewById(R.id.btCancel);
btCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
}
if (link.contentEquals("delete")) {
int count = toDoList.getCount();
SparseBooleanArray checkedItemPositions = toDoList.getCheckedItemPositions();
for (int i=0; i < count; i++) {
if (checkedItemPositions.get(i))
arrayList.remove(i);
}
adapter.notifyDataSetChanged();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.menuitem_exit) {
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setMessage("Are you sure?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setNegativeButton("No", null)
.show();
}
if (id == R.id.menuitem_help) {
Intent helpIntent = new Intent(ToDoActivity.this, Help.class);
helpIntent.putExtra("helptext", getString(R.string.help_todo));
startActivity(helpIntent);
}
if (id == R.id.menuitem_settings) {
Intent settingsIntent = new Intent(ToDoActivity.this, Settings.class);
startActivity(settingsIntent);
}
return super.onOptionsItemSelected(item);
}
}
LISTVIEWFRAGMENT:
public class ListViewFragment extends Fragment {
private String information;
private OnItemSelectedListener listener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.list_fragment, container, false);
Button btAdd = (Button) view.findViewById(R.id.btAdd);
btAdd.setOnClickListener(actionSelectedListener);
Button btDel = (Button) view.findViewById(R.id.btDelete);
btDel.setOnClickListener(actionSelectedListener);
return view;
}
private OnClickListener actionSelectedListener = new OnClickListener() {
@Override
public void onClick(View v) {
String description = (String) getView().getContentDescription();
information = description;
passSelection();
}
};
public interface OnItemSelectedListener {
void onButtonItemSelected(String link);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof OnItemSelectedListener) {
listener = (OnItemSelectedListener) activity;
}
else {
throw new ClassCastException(activity.toString() + "must implement ListViewFragment.OnItemSelectedListener");
}
}
public void passSelection() {
listener.onButtonItemSelected(information);
}
}
LIST_FRAGMENT.XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/todo_bkgd"
xmlns:tools="http://schemas.android.com/tools">
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:background="@color/light_grey"/>
<Button
android:layout_width="150dp"
android:layout_height="wrap_content"
android:id="@+id/btAdd"
android:layout_marginBottom="25dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginStart="25dp"
android:background="@color/grey"
android:text="@string/add_btn"
android:textColor="@color/white"
android:textSize="20sp"
android:gravity="center"
android:contentDescription="@string/add_btn" />
<Button
android:layout_width="150dp"
android:layout_height="wrap_content"
android:id="@+id/btDelete"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="25dp"
android:layout_marginEnd="25dp"
android:background="@color/grey"
android:text="@string/delete_btn"
android:textColor="@color/white"
android:textSize="20sp"
android:gravity="center"
android:contentDescription="@string/delete_btn" />
</RelativeLayout>
TODO.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!--FRAGMENT: list_fragment.xml-->
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
android:id="@+id/fragment1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
class="mcgill.christina.personaldataassistant_actionbar.ListViewFragment"
tools:layout="@layout/list_fragment"/>
</LinearLayout>
Ваш список Фрагмент не имеет адаптера или списка. Начните с этого –
Кроме того, тщательный 'ListFragment' уже является классом в библиотеке Android. https://developer.android.com/reference/android/support/v4/app/ListFragment.html –
Спасибо, я добавил адаптер и список. Теперь я запутался, имея список массивов внутри фрагмента - как я могу использовать этот фрагмент в активности? – Tina