2016-06-29 18 views
0

人の新しいインスタンスを作成するPersonクラスとストップウォッチの新しいインスタンスを作成するStopwatchクラスの2つのクラスがあります(変数Button、Button、TextView 、およびPerson)。BaseAdapterのクラスの新しいインスタンスを作成できません

私の主な機能では、私は2つのテキストボックス、ボタン、およびリストビューを編集しています。私がやろうとしているのは、EditTextに名字を記入してから、保存をクリックすることです。保存すると、そのデータを自分の特定のインスタンスに保存します。その人を使って、stopwatchインスタンス内のButtonのテキストを更新します。各ストップウオッチのインスタンスには異なるインスタンスが割り当てられ、各ストップウォッチの名前が異なります。現時点では、保存ボタンのための私のonclickリスナーは何もしていないし、なぜ私は知らない。私はストップウォッチに1人だけ割り当てることができるまで、今はgetCountを1にハードコードしています。これは愚かな質問、私はJavaのに新たなんだがあれば

申し訳

主な機能:

import android.annotation.SuppressLint; 
import android.content.Context; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final EditText firstName = (EditText)findViewById(R.id.FirstName); 
    final EditText lastName = (EditText)findViewById(R.id.LastName); 
    ListView listView = (ListView)findViewById(R.id.listView); 
    final Button save = (Button)findViewById(R.id.SaveUser); 


    BaseAdapter myAdapter = new BaseAdapter() { 
     @Override 
     public int getCount() { 
      return 1; 
     } 

     @Override 
     public Object getItem(int position) { 
      return null; 
     } 

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

     @SuppressLint("ViewHolder") 
     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.stopwatchview,parent,false); 

      final TextView Screen = (TextView) convertView.findViewById(R.id.Clock_View); 
      final Button start = (Button) convertView.findViewById(R.id.button_start); 
      Button reset = (Button) convertView.findViewById(R.id.button_reset); 
      final Person person = new Person(); 
      final Stopwatch stopwatch = new Stopwatch(Screen,start,reset,person);; 
      Button save = (Button) findViewById(R.id.SaveUser); 
      final EditText first = (EditText) findViewById(R.id.FirstName); 
      final EditText last = (EditText) findViewById(R.id.LastName); 

      assert save != null; 
      save.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        person.setName(first.getText().toString(), last.getText().toString()); 
       } 
      }); 


      start.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (stopwatch.isTicking()) { 
         stopwatch.stop(); 
        } else { 
         stopwatch.start(); 
        } 
       } 
      }); 

      reset.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        stopwatch.reset(); 
       } 
      }); 
      return convertView; 
     } 
    }; 
    listView.setAdapter(myAdapter); 
} 
} 

ストップウォッチクラス:

import android.graphics.Color; 
import android.os.Handler; 
import android.os.SystemClock; 
import android.widget.Button; 
import android.widget.TextView; 

public class Stopwatch { 
    TextView text; 
    Button start; 
    Button reset; 
    Person person; 


public Stopwatch(TextView t, Button Start, Button Reset, Person p){ 
    text = t; 
    start = Start; 
    reset = Reset; 
    person = p; 

} 

long starttime = 0L; 
long timeInMilliseconds = 0L; 
long timeSwapBuff = 0L; 
long updatedtime = 0L; 
int t = 1; 
int secs = 0; 
int mins = 0; 
int milliseconds = 0; 
Handler handler = new Handler(); 
Runnable callback; 

public void start(){ 
    callback = updateTimer(); 
    start.setText("pause"); 
    starttime = SystemClock.uptimeMillis(); 
    handler.postDelayed(callback, 0); 
    t = 0; 
} 

public void stop(){ 
    text.setTextColor(Color.BLUE); 
    start.setText(person.firstName); 
    timeSwapBuff += timeInMilliseconds; 
    handler.removeCallbacks(callback); 
    t = 1; 
} 

public void reset(){ 
    stop(); 
    starttime = 0L; 
    timeInMilliseconds = 0L; 
    timeSwapBuff = 0L; 
    updatedtime = 0L; 
    t = 1; 
    secs = 0; 
    mins = 0; 
    milliseconds = 0; 
    if(t==0){ 
     handler.removeCallbacks(callback); 
    } 
    text.setText("00:00:00"); 
} 

public boolean isTicking(){ 
    if(t==0){ 
     return true; 
    } 
    return false; 
} 

//Update Timer 
private Runnable updateTimer() { 
    return new Runnable() { 
     public void run() { 
      timeInMilliseconds = SystemClock.uptimeMillis() - starttime; 
      updatedtime = timeSwapBuff + timeInMilliseconds; 
      secs = (int) (updatedtime/1000); 
      mins = secs/60; 
      secs = secs % 60; 
      milliseconds = (int) (updatedtime % 1000); 
      text.setText("" + mins + ":" + String.format("%02d", secs) + ":" 
        + String.format("%03d", milliseconds)); 
      text.setTextColor(Color.RED); 
      handler.postDelayed(this, 0); 
     } 
    }; 
}; 

} 

人クラス:

public class Person { 
String firstName; 
String lastName; 
String initials; 

public Person(){ 
    firstName = null; 
    lastName = null; 
    initials = null; 
}; 

public void setName(String FirstName, String LastName){ 
    firstName = FirstName; 
    lastName = LastName; 
    setInitials(FirstName, LastName); 
} 

private void setInitials(String firstName, String lastName) { 
    String firstLetter = firstName.substring(0,1); 
    String lastLetter = lastName.substring(0,1); 
    initials = firstLetter.concat(lastLetter); 
} 

} 

答えて

0

主な問題は、BaseAdapterに決してデータが入力されないことです。あなたは空のデータにアクセスします。これは、BaseAdapterを正しく使用していないためです。

まず、人物データのコレクションを定義します。これは、配列を使用して達成することができます。

ArrayList<Person> mPersonList; 

次に、このようBaseAdapterを拡張することで、あなたのアダプタを作成します。

public class MyBaseAdapter extends BaseAdapter { 

    ArrayList<Person> mPersonList = new ArrayList()<>; 
    LayoutInflater inflater; 
    Context context; 


    public MyBaseAdapter(Context context, ArrayList<Person> myList) { 
     this.myList = myList; 
     this.context = context; 
     inflater = LayoutInflater.from(this.context); 
    } 

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

    @Override 
    public ListData getItem(int position) { 
     return myList.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     MyViewHolder mViewHolder; 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.layout_list_item, parent, false); 
      mViewHolder = new MyViewHolder(convertView); 
      convertView.setTag(mViewHolder); 
     } else { 
      mViewHolder = (MyViewHolder) convertView.getTag(); 
     } 

    // get data in position 
     ListData currentListData = getItem(position); 

    // set data to view 
     mViewHolder.edtFirstName.setText(currentListData.getFirstName()); 
    // add your other data to other view. 

     return convertView; 
    } 

    private class MyViewHolder { 
     EditText edtFirstName; 
    // Add the other view here. 

     public MyViewHolder(View item) { 
      edtFirstName = (EditText) item.findViewById(R.id.FirstName); 
     // add the other view here. 
     } 
    } 
} 

はあなたの拡張BaseAdapterが使用するセッターとゲッターを追加することによって、あなたのPersonクラスを修正:

public class Person { 
    private String firstName; 
    private String lastName; 
    private String initials; 

    public Person(){ 
    this("", ""); 
    }; 

    public Person(String FirstName, String LastName){ 
    firstName = FirstName; 
    lastName = LastName; 
    setInitials(FirstName, LastName); 
    } 

    private void setInitials(String firstName, String lastName) { 
    String firstLetter = firstName.substring(0,1); 
    String lastLetter = lastName.substring(0,1); 
    initials = firstLetter.concat(lastLetter); 
    } 

    private void setFirstName(String firstName) { 
    this.firstName = firstName; 
    } 

    private String firstName() { 
    return this.firstName; 
    } 

    //ADD the other setter and getter like setFirstName and firstName method. 
} 

は、あなたのBaseAdapterためのPersonListのためのいくつかのデータを読み込む:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ... 
    ... 
    ArrayList<Person> mPersonList = new ArrayList<Person>(); 
    // this is a simple data 
    Person person1 = new Person("John", "Keley"); 
    Person person2 = new Person("Chris", "Maloy"); 
    Person person3 = new Person("Andery", "Dreyfus"); 
    Person person4 = new Person("Portgas", "D. Ace"); 
    Person person5 = new Person("Bankai", "Zankupatto"); 
    mPersonList.add(person1); 
    mPersonList.add(person2); 
    mPersonList.add(person3); 
    mPersonList.add(person4); 
    mPersonList.add(person5); 
} 

次に、人物データを追加した後にアダプターを追加します。 //これは、mPersonListデータが追加された後に下に表示されます。 listView.setAdapter(new MyBaseAdapter(this、mPersonList)); ListView using BaseAdapter - Android

:あなたが見ることができる完全なチュートリアルについては

...

関連する問題