1

だから私が抱えている問題は、キー値が

キー:整数値:ArrayList

カスタムlistViewアダプターでは、ハッシュテーブルの特定の位置の値のみを表示するように設定していますが、現時点ではハッシュテーブル全体を表示しています。何が間違っているのかよくわかりません。これがアダプターです

注:Statics.mainPageListPositionは、ユーザーがメイン画面の特定の位置をクリックしたときに設定される静的なintです。次に、アダプターにその位置とその位置のデータのみを表示させます。

package assignments;

import java.util.ArrayList;
import java.util.Hashtable;

import com.example.mt_study.R;
import com.example.statics.Statics;

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 android.widget.Toast;

public class AssignmentListViewAdapter extends ArrayAdapter<Assignment> {

    private LayoutInflater inflater;
    private Hashtable<Integer, ArrayList<Assignment>> assignmentList;

    // class used to hold views when the user scrolls on the listView
    // it stores them and then we can re-use their id's as the user scrolls
    // down or up the screen so we don't have to keep calling findViewById
    private class assignmentViewHolder {
        TextView Title;
        TextView Date;

        public assignmentViewHolder(TextView assignmentTitle, TextView Date) {
            this.Title = assignmentTitle;
            this.Date = Date;
        }

        public TextView getTitle() {
            return Title;
        }

        public TextView getDate() {
            return Date;
        }
    }

    public AssignmentListViewAdapter(Context context,
            Hashtable<Integer, ArrayList<Assignment>> data) {
        super(context, R.id.assignment_row_title, R.id.assignment_row_date);
        inflater = LayoutInflater.from(context);
        assignmentList = data;

    }

    // set of functions useful for the getView function
    public int getCount() {
        return Statics.allAssignments.get(Statics.mainPageListPosition).size();
    }

    public Assignment getItem(int position) {
        return assignmentList.get(Statics.mainPageListPosition).get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public int getViewTypeCount() {
        return 1;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        // Assignment assignment = this.getItem(position);

        TextView assignmentTitle;
        TextView assignmentDate;

        // if theres no view yet created on the screen, create one
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.assignment_row, null);

            // give the views their respective ID's
            assignmentTitle = (TextView) convertView
                    .findViewById(R.id.assignment_row_title);
            assignmentDate = (TextView) convertView
                    .findViewById(R.id.assignment_row_date);

            // set the tag so we can just use the viewHolder instead of calling
            // findViewById over. It saves memory
            convertView.setTag(new assignmentViewHolder(assignmentTitle,
                    assignmentDate));
        }
        // this gets called when the user scrolls down or up the screen and the
        // adapter
        // wants to maximize efficiency by just calling the viewHolder instead
        // of findViewById
        else {
            assignmentViewHolder viewHolder = (assignmentViewHolder) convertView
                    .getTag();
            assignmentTitle = viewHolder.getTitle();
            assignmentDate = viewHolder.getDate();

        }
        // down here is where you set the values for all your views/objects
        // such as Buttons or textViews.
        assignmentTitle.setText(Statics.allAssignments
                .get(Statics.mainPageListPosition).get(position).getTitle());
        assignmentDate.setText(Statics.allAssignments
                .get(Statics.mainPageListPosition).get(position).getDate_due());

        return convertView;
    }
}

編集:最近の発見、私のハッシュテーブルは私が送信するすべての値を利用可能なすべての位置に配置するということです笑。私がやっていることは、ユーザーがメインページの位置をクリックすると、その位置を保存し、それを使用して、その位置に保存したデータをハッシュテーブルに保存することです。Tempは、ユーザーが保存したデータが次の形式で保存されたarrayListです。

{number、String、number、string}ここで、numberは、文字列を格納するハッシュテーブル内の位置です。

ここで、データをハッシュテーブルに保存しています。すべてが私には正しく見えます、多分私はそれをあまりにも長い間見つめていました@。@

for (int i = 0; i < temp.size(); i++) {
                if (isInteger(temp.get(i))) {
                    currentAssignment.setTitle(temp.get(i + 1));
                    //currentAssignment.setDate_due(temp.get(i + 2));
                    currentAssignmentList.add(index, currentAssignment);
                    index++;

                    Statics.allAssignments.put(Integer.parseInt(temp.get(i)), currentAssignmentList);
                    //Statics.allAssignments.get(Integer.parseInt(temp.get(i))).add(currentAssignment);
                    currentAssignment = new Assignment();
                    //Toast.makeText(context, "Called" + Integer.toString(i), Toast.LENGTH_SHORT).show();
                }
            }
4

2 に答える 2

3

ArrayAdapter のアイテムのリストをどこに設定していますか? への呼び出しと一緒に、または呼び出しでdata、コンストラクターパラメーターを使用する必要があると思います。現在、このデータを無視して、代わりに統計を使用していることに注意してください。では、スーパークラス ArrayAdapter で項目を正しく設定したら、スタティックの代わりにこのオブジェクトのフィールドを使用して設定する必要があります。addAll(data)super()getView()getView()Assignment a = getItem(position)

たとえば、コンストラクターで...

super(context, R.id.assignment_row_title, R.id.assignment_row_date, data);

次に getView() で...

Assignment a = getItem(position);
assignmentTitle.setText(a.getTitle());
assignmentDate.setText(a.getDate_due());

これはもちろん、渡したリストdataが正しいことを前提としています。コードで項目のリストを 1 つだけ見るようになれば、このリストが正しいことをより簡単に確認できることを願っています。

編集:

コードの 2 番目のチャンクでは、currentAssignmentListハッシュ テーブル キーごとにどこで新しいキーを作成しますか? ハッシュ テーブルのすべてのエントリに同じオブジェクトを割り当てると、すべてのエントリに同じリストが含まれます。

于 2012-10-21T08:14:51.747 に答える
2

値を変更するときは、忘れずに電話notifyDataSetChangedしてください。adaptermainPageListPosition

于 2012-10-21T08:26:03.950 に答える