Search code examples
androidlistviewcustom-lists

Not able to building Custom List View with multiple string arrays


I was trying to make an activity like this

enter image description here

So just for now I started with creating a custom listView which have static values of text to be displayed. I created two xml files i.e one with EditText, button and ListView and other one describing row of ListView.

My java code is as follow

    package com.ved_copy.copy;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ListView;
    import android.widget.Toast;

    public class MainActivity extends Activity {
  ListView list;
  String[] name = { "Shailene Woodley", "Susan Coffey", "Jennifer Lawrence",
        "Emma Watson", "Emma Stone" };

String[] question = { "Is Vishesh Single?", "Net scap navigator",
        "Who is primeminister of japan", "popullation growth rate",
        "will uganda be a super power" };

String[] solution = { "Solution:12", "Solution:6", "Solution:11",
        "Solution:2", "Solution:23" };

String[] date = { "24/6/14", "22/6/14", "22/6/14", "10/6/14", "27/5/14" };

Integer[] imageId = { R.drawable.woodley, R.drawable.susan,
        R.drawable.jennifer, R.drawable.emma, R.drawable.stone };

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

    CustomList adapter = new CustomList(MainActivity.this, name, question,
            solution, date, imageId);
    list = (ListView) findViewById(R.id.list);
    list.setAdapter(adapter);
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Toast.makeText(MainActivity.this,
                    "You Clicked at " + name[+position], Toast.LENGTH_SHORT)
                    .show();
        }
    });

}
    }

and the one that extends ArrayAdapter is as follows

    package com.ved_copy.copy;

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

    public class CustomList extends ArrayAdapter<String> {

private final Activity context;
private final String[] name;
private final String[] question;
private final String[] solution;
private final String[] date;
private final Integer[] imageId;

public CustomList(Activity context, String[] name, String[] question,
        String[] solution, String[] date, Integer[] imageId) {
    super(context, R.layout.list_row, name);
    this.context = context;
    this.name = name;
    this.imageId = imageId;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View row = inflater.inflate(R.layout.list_row, null, true);

    TextView txtQuestion = (TextView) row.findViewById(R.id.tv_question);
    TextView txtSolution = (TextView) row.findViewById(R.id.tv_solution);
    TextView txtName = (TextView) row.findViewById(R.id.tv_name);
    TextView txtDate = (TextView) row.findViewById(R.id.tv_date);
    ImageView imageView = (ImageView) row.findViewById(R.id.iv_image);
    txtQuestion.setText(question[position]);
    txtSolution.setText(solution[position]);
    txtName.setText(name[position]);
    txtDate.setText(date[position]);
    imageView.setImageResource(imageId[position]);
    return row;
}

    }

But there is a problem with constructor help me to fix that thanks.


Solution

  • Maybe you can use BaseAdapter like this example like

    public class MyNewsArrayAdapter extends BaseAdapter {
    Activity context;
    String title[];
    String description[];
    int att[];
    int ph[];
    
    public MyNewsArrayAdapter(Activity context, String[] title,
            String[] description, int[] att, int[] ph) {
        super();
        this.context = context;
        this.title = title;
        this.description = description;
        this.att = att;
        this.ph = ph;
    }
    ...
    

    It's help for me, when I used 3 TextView and 2 ImageView.
    And sorry for my English..