Теперь у меня есть сериализуемый объектный класс под названием Tasks, я намерен создать Listview, каждый объект представляет элемент в списке, но когда я запускаю код, он не работает

Это основная деятельность:

public class MainActivity extends ActionBarActivity {
    EditText NameET, ImportanceED, dateED, TimeED;
    String Name, Importance, date, Time;

@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            NameET = (EditText) findViewById(R.id.NameeditText);
            ImportanceED = (EditText) findViewById(R.id.ImportanceeditText2);
            dateED = (EditText) findViewById(R.id.dateeditText3);
            TimeED = (EditText) findViewById(R.id.timeeditText4);

        public void GetTexts() {


        Name = NameET.getText().toString();
        Importance = ImportanceED.getText().toString();
        date = dateED.getText().toString();
        Time = TimeED.getText().toString();
    }

    public void AddTask(View view) {
        String testName = NameET.getText().toString().trim();
        String testImportance = ImportanceED.getText().toString().trim();
        String testDate = dateED.getText().toString().trim();
        String testTime = TimeED.getText().toString().trim();


            GetTexts();

 OpenDetailsActivity();

        }
    }

    public void OpenDetailsActivity() {
        Intent DetailsIntent = new Intent(this, DetailsActivity.class);
        DetailsIntent.putExtra("Name",Name );
        DetailsIntent.putExtra("Importance",Importance );
        DetailsIntent.putExtra("date",date );
        DetailsIntent.putExtra("Time",Time );

        startActivity(DetailsIntent);


    }

И это список, содержащий активность:

Открытый класс DetailsActivity расширяет Activity {

ListView list;
String Name;
String Importance;
String date;
String Time ;

ArrayList <Tasks>TaskList = new ArrayList();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.task_list);
    Intent intent = getIntent();
    Name= intent.getStringExtra("Name");
    Importance= intent.getStringExtra("Importance");
    date= intent.getStringExtra("date");
    Time= intent.getStringExtra("Time");
    addToList();


}

public void addToList() {
    int i ;
    int N = TaskList.size();
    if (N > 0 ){
        i = N + 1 ;

    } else {
        i= 0 ;
    }

Все работает нормально, пока здесь список не будет пустым

    TaskList.add(i, new Tasks(Name, Importance, date, Time));



    ListAdapter adapter = new ListAdapter(this, TaskList);
    list = (ListView) findViewById(R.id.listView_tasks);
    list.setAdapter(adapter);
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                    @Override
                                    public void onItemClick(AdapterView<?> parent, View view,
                                                            int position, long id) {

                                        String SelectedTask = TaskList.get(position).getName();
                                        Toast.makeText(getApplicationContext(), SelectedTask, Toast.LENGTH_SHORT).show();

Это класс Tasks Serializable

class Tasks implements Serializable  {

    String name="";
     String date="";
    String time = "";
    String importance="";

    public Tasks(String name, String importance, String date , String time) {
        this.date = date;
        this.importance = importance;
        this.name = name;
        this.time = time;
    }


    public String getDate() {
        return date;
    }


    public String getImportance() {
        return importance;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTime() {
        return time;
    }

А это кастомный адаптер

public class ListAdapter extends ArrayAdapter {

        private final Activity context;
    List<Tasks> TaskList;

    public ListAdapter(Activity context, List<Tasks> TaskList) {
            super(context, R.layout.row_layout);

            this.context=context;
            this.TaskList=TaskList;
        }

        public View getView(int position,View view,ViewGroup parent) {
            LayoutInflater inflater=context.getLayoutInflater();
            View rowView=inflater.inflate(R.layout.row_layout, null , false);

            TextView Name = (TextView) rowView.findViewById(R.id.NameTV);
            TextView Date = (TextView) rowView.findViewById(R.id.dateTV);
            TextView Importance = (TextView) rowView.findViewById(R.id.importanceTV);
            TextView Time = (TextView) rowView.findViewById(R.id.timeTV);

            TaskList.get(position).getName();

            Name.setText(TaskList.get(position).getName());
            Date.setText(TaskList.get(position).getDate());
            Importance.setText(TaskList.get(position).getImportance());
            Time.setText(TaskList.get(position).getTime());

            return rowView;

Это макет task_list

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView_tasks" />
</LinearLayout>

И этот row_layout

   <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:id="@+id/NameTV"
            android:layout_gravity="center_horizontal" />
    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:id="@+id/importanceTV" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/dateTV" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:id="@+id/timeTV" />
    </LinearLayout>
</LinearLayout>
0
Muhammad Mustafa 23 Фев 2016 в 00:40

2 ответа

Лучший ответ

Я внес некоторые изменения в ваш код, я протестировал его на своем компьютере, и он работает.

Я обновляю только ListAdapter.java, и он работает.

ListAdapter.java

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

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

/**
 * Created by Usman Asghar on 23/02/2016.
 */
public class ListAdapter extends ArrayAdapter {

   Context context;
   List<Tasks> TaskList;


    public ListAdapter(Activity context, List<Tasks> TaskList) {
        super(context, R.layout.row_layout,TaskList);
        this.context = context;
        this.TaskList = TaskList;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        if (view == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.row_layout, null, false);
        }
        TextView Name = (TextView) view.findViewById(R.id.NameTV);
        TextView Date = (TextView) view.findViewById(R.id.dateTV);
        TextView Importance = (TextView) view.findViewById(R.id.importanceTV);
        TextView Time = (TextView) view.findViewById(R.id.timeTV);

        Name.setText(TaskList.get(position).getName());
        Date.setText(TaskList.get(position).getDate());
        Importance.setText(TaskList.get(position).getImportance());
        Time.setText(TaskList.get(position).getTime());
        return view;
    }
}

Я изменил конструктор ArrayAdapter на


 super(context, R.layout.row_layout);

Что


 super(context, R.layout.row_layout,TaskList);

ArrayAdapter не работает, пока мы не укажем, какие данные мы хотим отображать в ListView.

И я вношу небольшие изменения в метод getView ().

1
Android Developer 23 Фев 2016 в 02:50

Добавьте в свой адаптер этот метод:

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

Измените это:

TaskList.add(i, new Tasks(Name, Importance, date, Time));

К этому:

TaskList.add(new Tasks(Name, Importance, date, Time));
0
Mussa 22 Фев 2016 в 22:53