0

Я пытаюсь добавить флажок в настраиваемом виде списка, но он дает ошибку NullPointerException.Пользовательский просмотр списка с флажком в android

Это мой MainActivity класс

public class Classes extends Activity { 

ImageView imageViewNewClass; 
ListView mListView; 
String[] stg1; 
List<String[]> names2 = null; 
DataManipulatorClass dataManipulator; 
CustomAdapter customAdapter; 
public Classes classes = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.classes); 

    imageViewNewClass = (ImageView) findViewById(R.id.newclass); 
    mListView = (ListView) findViewById(R.id.displaydata); 

    Resources res =getResources(); 
    classes = this; 
    customAdapter=new CustomAdapter(classes, stg1,res); 
    mListView.setAdapter(customAdapter); 

    imageViewNewClass.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent(Classes.this, Class_Create.class); 
      startActivity(intent); 
     } 
    }); 

    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View item, 
       int position, long id) { 
      Toast.makeText(getApplicationContext(), 
        "Listview item clicked", Toast.LENGTH_LONG).show(); 
     } 
    }); 

    dataManipulator = new DataManipulatorClass(this); 
    names2 = dataManipulator.selectAll(); 

    stg1 = new String[names2.size()]; 
    int x = 0; 
    String stg; 

    for (String[] name : names2) { 
     stg = "Class Name : " + name[1]; 
     stg1[x] = stg; 
     x++; 
    } 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, stg1); 

    mListView.setAdapter(new ArrayAdapter<String>(this, R.layout.check, 
      stg1)); 
    mListView.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
} 
} 

И это мой класс CustomAdapter

public class CustomAdapter extends BaseAdapter { 

/*********** Declare Used Variables *********/ 
private Activity activity; 
private String[] data; 
private static LayoutInflater inflater = null; 
public Resources res; 
int i = 0; 

/************* CustomAdapter Constructor *****************/ 
public CustomAdapter(Activity a, String[] stg1, Resources resLocal) { 

    /********** Take passed values **********/ 
    activity = a; 
    data = stg1; 
    res = resLocal; 

    /*********** Layout inflator to call external xml layout() ***********/ 
    inflater = (LayoutInflater) activity 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

} 

/******** What is the size of Passed Arraylist Size ************/ 
public int getCount() { 
    if (data.length <= 0) 
     return 1; 
    return data.length; 
} 

public Object getItem(int position) { 
    return position; 
} 

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

public static class ViewHolder { 
    public CheckBox checkBox; 
} 

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

    View vi = convertView; 
    ViewHolder holder; 

    if (convertView == null) { 
     vi = inflater.inflate(R.layout.check, null); 
     holder = new ViewHolder(); 
     holder.checkBox = (CheckBox) vi.findViewById(R.id.checkBox1); 
     vi.setTag(holder); 
    } else 
     holder = (ViewHolder) vi.getTag(); 
    return vi; 
} 
public void onClick(View v) { 
    Log.v("CustomAdapter", "=====Row button clicked====="); 
} 
} 

Другое то это я уже более 2 активности, один для создания базы данных и хранения значения в нем и других это передача данных.

Что я пытаюсь сделать, это когда пользователь нажимает кнопку в классе Classes, открывается новый вид и запрашивает ввод данных, я храню эти данные в базе данных, а затем пытаюсь извлечь эти данные в класс классов. поэтому я просмотрел список, отображающий данные.

Теперь, когда у меня есть список, я также хочу показать флажок, и когда пользователь отметит любой флажок, откроется новое действие и покажет соответствующий контент этого флажка.

Но когда я пытаюсь реализовать флажок со списком, я получаю ошибку.

Вот мой журнал кот http://i.share.pho.to/e06cc7b5_o.png

Спасибо заранее ...

+0

Кажется, вы забыли инициализировать адаптер перед его использованием –

ответ

1

Вы инициализировали свой пользовательский адаптер строковым массивом под названием «stg1», но сам «stg1» НЕ был инициализирован, когда вы использовали его для этой строки в своей деятельности.

customAdapter=new CustomAdapter(classes, stg1,res); 

Тогда вы настроите свой STG1 массив на более позднем месте этой линии

stg1 = new String[names2.size()]; 

Итак, когда вы первый использовал этот нулевой объект в адаптер, адаптер не смог определить Array Size в Метод GetCount. Вот почему вы получаете исключение с нулевым указателем.

0

может быть, вы забыли инициализировать data массива в конструкторе вашего адаптера

попробовать, как это в конструкторе адаптера

/************* CustomAdapter Constructor *****************/ 
public CustomAdapter(Activity a, String[] stg1, Resources resLocal) { 

/********** Take passed values **********/ 
activity = a; 
data = new String[stg1.length]; //// Add this line 
data = stg1; 
res = resLocal; 
. 
. 
. 




} 
0

Строковый массив, который вы передали в CustomAdapter, имеет значение

customAdapter=new CustomAdapter(classes, stg1,res); // here stg1 is null 
Смежные вопросы