Search code examples
javaandroidstringandroid-listviewlistadapter

Having troubles getting data from List Adapter for OnItemClick


Im having an issue with getting data that is obtained when my listadapter is set to my listview. Im trying to get this data in onItemClick so that i can put it into my intent extra's for my other activity to obtain.

The Problem

Currently i've created null string variables and then in my adapter assigning the strings with the desired text by methods within my model. However the problem im having is that the text that is being pulled is not the correct text for the position that onitemclick was called for.

Here some code...

XMLParseActivity

public class XMLParseActivity extends Activity implements AdapterView.OnItemClickListener {

 private ListView mIssueListView;
 private IssueParser mIssueParser;
 private List<IssueFeed> mIssueList;
 private IssueAdapter mIssueAdapter;

 private String result_connectedtype = "";
 private String result_symptom = "";
 private String result_problem = "";
 private String result_solution = "";
 private String result_comments = "";

...

public class IssueAdapter extends ArrayAdapter<IssueFeed> {
    public List<IssueFeed> issueFeedList;

    public IssueAdapter(Context context, int textViewResourceId, List<IssueFeed> issueFeedList) {
        super(context, textViewResourceId, issueFeedList);
        this.issueFeedList = issueFeedList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        IssueHolder issueHolder = null;
        if (convertView == null) {
            view = View.inflate(XMLParseActivity.this, R.layout.issue_list_item, null);
            issueHolder = new IssueHolder();
            issueHolder.issueConnectedType = (TextView) view.findViewById(R.id.result_connected_type);
            issueHolder.issueSymptomView = (TextView) view.findViewById(R.id.result_symptom);
            view.setTag(issueHolder);
        } else {
            issueHolder = (IssueHolder) view.getTag();
        }
        IssueFeed issueFeed = issueFeedList.get(position);
        issueHolder.issueConnectedType.setText(issueFeed.getConnected_type());
        issueHolder.issueSymptomView.setText(issueFeed.getSymptom());

        //THE DATA I WANT TO USE IN MY INTENT
        result_solution = issueFeed.getSolution();
        result_comments = issueFeed.getComments();
        result_connectedtype = issueFeed.getConnected_type();
        result_problem = issueFeed.getProblem();
        result_symptom = issueFeed.getSymptom();

        return view;
    }
}

static class IssueHolder {
    public TextView issueSymptomView;
    public TextView issueConnectedType;
}

@Override
public void onItemClick(AdapterView<?> adapterView, View v, int position, long id) {

    //Put the strings in intent extra
    Intent intent = new Intent(this, SpecificIssueActivity.class);
    intent.putExtra("symptom", result_symptom);
    intent.putExtra("problem", result_problem);
    intent.putExtra("solution", result_solution);
    intent.putExtra("comments", result_comments);
    intent.putExtra("connectedtype", result_connectedtype);
    startActivity(intent);
}

The listAdapter is set in a asynctask in the below code

public class DoLocalParse extends AsyncTask<String, Void, List<IssueFeed>> {
    ProgressDialog prog;
    String jsonStr = null;
    Handler innerHandler;

    @Override
    protected void onPreExecute() {
        prog = new ProgressDialog(XMLParseActivity.this);
        prog.setMessage("Loading....");
        prog.show();
    }

    @Override
    protected List<IssueFeed> doInBackground(String... params) {
        mIssueParser = new IssueParser(null);
        mIssueList = mIssueParser.parseLocally(params[0]);

        return mIssueList;
    }

    @Override
    protected void onPostExecute(List<IssueFeed> result) {
        prog.dismiss();
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                mIssueAdapter = new IssueAdapter(XMLParseActivity.this, R.layout.issue_list_item,
                        mIssueList);
                int count = mIssueAdapter.getCount();
                if (count != 0 && mIssueAdapter != null) {
                    mIssueListView.setAdapter(mIssueAdapter);
                }
            }
        });
    }
}

And my model IssueFeed looks like this

public class IssueFeed implements Serializable {

private String connected_type;
private String symptom;
private String problem; 
private String solution; 
private String comments; 

public IssueFeed() {
}

public IssueFeed(String connected_type, String symptom, String problem, String solution, String comments) {
    this.connected_type = connected_type;
    this.symptom = symptom;
    this.problem = problem;
    this.solution = solution;
    this.comments = comments;
}

public String getConnected_type() {
    return connected_type;
}

public String getSymptom() {
    return symptom;
}

public String getProblem() {
    return problem;
}

public String getSolution() {
    return solution;
}

public String getComments() {
    return comments;
}

public void setConnected_type(String connected_type) {
    this.connected_type = connected_type;
}

public void setSymptom(String symptom) {
    this.symptom = symptom;
}

public void setProblem(String problem) {
    this.problem = problem;
}

public void setSolution(String solution) {
    this.solution = solution;
}

public void setComments(String comments) {
    this.comments = comments;
}
}

Solution

  • I have solve the issue by getting the data from some simple methods in my model to obtain the values.