0

私は、ファイル内で文字列配列としてListView宣言された映画のを持っているアプリケーションに取り組んでいます。strings.xml各行ListViewには3つの要素があります。a。)映画のタイトルb。)グロスc。)リリース日。行を長押しすると、その特定の行を編集するオプションが表示されます。ユーザーがそれをクリックすると、次の画面に移動します。ここでEditTexts、タイトル、グロス、日付に対応する3が表示され、ここでそのエントリを編集できます。ただし、編集テキストには最初に初期データを入力する必要があります。

私の問題は、のデータにアクセスできないように見えるListViewため、「編集画面」に初期データが表示されないことです。コードにエラーはありませんが、私は何か間違ったことをしていることを知っています。私はそれに指を置くことができません。これが最初の画面の私のコードです:

public void editEntry(int id) {
    Intent newData = new Intent(Lab8_082588.this, Lab8_082588Add.class);
    TextView movieTitle = (TextView) findViewById(R.id.title);
    TextView movieGross = (TextView) findViewById(R.id.gross);
    TextView movieDate = (TextView) findViewById(R.id.date);

    String startTitle = movieTitle.getText().toString();
    String startGross = movieGross.getText().toString();
    String startDate = movieDate.getText().toString();

    newData.putExtra(Lab8_082588Edit.TITLE_STRING, startTitle);
    newData.putExtra(Lab8_082588Edit.GROSS_STRING, startGross);
    newData.putExtra(Lab8_082588Edit.DATE_STRING, startDate);
    startActivityForResult(newData, Lab8_082588.EDIT_MOVIE);
}

私のアダプタクラス:

    private class SampleCustomAdapter extends BaseAdapter {


    public SampleCustomAdapter(ArrayList<Lab8_082588FetchDetails> movies) {
        internalList = movies;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return internalList.size();
    }

    @Override
    public Object getItem(int index) {
        // TODO Auto-generated method stub
        return internalList.get(index);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

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

        LayoutInflater inflater = getLayoutInflater();
        View view;

        if (convertView == null) {
            view = inflater.inflate(R.layout.row, null);
        } else {
            view = convertView;
        }

        // extract the views to be populated
        TextView title = (TextView) view.findViewById(R.id.title);
        TextView gross = (TextView) view.findViewById(R.id.gross);
        TextView date = (TextView) view.findViewById(R.id.date);

        // extract the object that will fill these
        Lab8_082588FetchDetails movie = internalList.get(position);

        title.setText(movie.getTitle());
        date.setText(movie.getDate());
        gross.setText(movie.getGross());

        // return the view
        return view;
    }
}

私のEditMoviesアクティビティ:

      @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addedit);
    initialize();
}

private void initialize() {
    // TODO Auto-generated method stub
    Intent prepopulate = getIntent();
    EditText movieTitle = (EditText) findViewById(R.id.etTitle);
    EditText movieGross = (EditText) findViewById(R.id.etGross);
    EditText movieDate = (EditText) findViewById(R.id.etDate);

    String startTitle =  prepopulate.getStringExtra(Lab8_082588Edit.TITLE_STRING);
    String startGross = prepopulate.getStringExtra(Lab8_082588Edit.GROSS_STRING);
    String startDate = prepopulate.getStringExtra(Lab8_082588Edit.DATE_STRING);

    movieTitle.setText(startTitle);
    movieGross.setText(startGross);
    movieDate.setText(startDate);
}

私のFetchDetailsクラス

    public class Lab8_082588FetchDetails implements Comparable<Lab8_082588FetchDetails>     {

private String title;
private String gross;
private String date;

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getGross() {
    return gross;
}

public void setGross(String gross) {
    this.gross = gross;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

@Override
public int compareTo(Lab8_082588FetchDetails another) {
    // TODO Auto-generated method stub
    return title.compareTo(another.title);
}

}

選択したコンテキストアイテム:

    @Override
public boolean onContextItemSelected(MenuItem item) {
    if (item.getTitle() == "Edit Entry") {
        editEntry(item.getItemId());
    } else if (item.getTitle() == "Delete Entry") {
        deleteEntry(item.getItemId());
    } else {
        return false;
    }
    return true;
}

どうすればこれを修正できますか?

4

1 に答える 1

0

メソッドを使用[ListView].setOnItemClickListiner(listOnItemClickListener );し、位置インデックスを使用して、それぞれのムービーのデータを取得できます。

OnItemClickListener listOnItemClickListener = new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View view, int position,
            long arg3) {

                    Lab8_082588FetchDetails movie = internalList.get(position);

                    //instead of passing int value pass movie object.
                    editEntry(movie);

                     //newData.putExtra(Lab8_082588Edit.TITLE_STRING, movie.getTitle());
                     //newData.putExtra(Lab8_082588Edit.GROSS_STRING, movie.getGross());
                     //newData.putExtra(Lab8_082588Edit.DATE_STRING, movie.getDate());

                     //startActivityForResult(newData, Lab8_082588.EDIT_MOVIE);

    }
};

これがうまくいかない場合は、 を使用してデータをビューにView.setTag()タグ付けし、そのデータを取得できます。getView()View.getView()

于 2012-08-18T14:52:00.370 に答える