2015-10-13 5 views
0

Итак, я создал одно действие «области», в котором есть сетчатый вид кнопок и текстовое изображение на нем, чтобы вы могли видеть название области на кнопке. , когда вы нажимаете кнопку, вы попадаете в «таблицу», где вы видите фактически то же самое + номер таблицы (название области + номер таблицы), но когда я нажимаю на область, приложение падает, t получить название области в действии таблицы.Получение имени из другого вида деятельности

Я знаю, что это сбивает с толку. Я старался изо всех сил с моим объяснением, я поставил здесь оба адаптера, один для областей и второй для таблиц, самым коротким способом, пожалуйста, скажите мне, что я делаю неправильно.

адаптер района:

public ArrayList<Area> areas; 

public static LayoutInflater inflater = null; 

public MyAreaAdapter(Context mContext, ArrayList<Area> areas) { 
    this.mContext = mContext; 
    this.areas = areas; 

    inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

public MyAreaAdapter(Activity_Table activity_zone){ 
} 

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

    TextView textView; 
    ImageView imageView; 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.imagebutton_layout, null); 
    } 

     ImageView myImageView = (ImageView) convertView.findViewById(R.id.myImageView); 
     TextView areaName = (TextView) convertView.findViewById(R.id.areaName); 

    areaName.setText(areas.get(position).getName()); 

    return convertView; 
} 

и это адаптер таблицы: журнал

ArrayList<Area> areas; 
ArrayList<Table> tables; 

public static LayoutInflater inflater = null; 

public MyTableAdapter(Context mContext, ArrayList<Table> tables) { 
    this.mContext = mContext; 
    this.tables = tables; 

    inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

public MyTableAdapter(Activity_Table activity_table){ 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    TextView textView; 
    ImageView imageView; 


    if (convertView == null){ 
     convertView = inflater.inflate(R.layout.imageview_table_layout, null); 
    } 

    ImageView tableImageView = (ImageView) convertView.findViewById(R.id.tableImageView); 
    TextView tableName = (TextView) convertView.findViewById(R.id.tableName); 

    tableName.setText(areas.get(position).getName() + " " + areas.get(position).getNumOFTables()); 

    return convertView; 
} 

Ошибка:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.ArrayList.get(int)' on a null object reference 

это линия он выходит из строя:

TableName.setText(areas.get(position).getName() + " " + areas.get(position).getNumOFTables()); 

это класс, который вызывает мой настольный адаптер:

GridView gridView; 
ArrayList<Table> tables; 
ImageView imageView; 
MyTableAdapter adapter; 


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

    Intent startIntent = getIntent(); 
    String numTables = startIntent.getStringExtra("numTables"); 

    gridView = (GridView) findViewById(R.id.gridView2); 

    OrdersDBAdapter.OrdersDBHelper ordersDBHelper = new OrdersDBAdapter.OrdersDBHelper(Activity_Table.this); 
    tables = new ArrayList<Table>(); 

    for (int i = 0; i < Integer.parseInt(numTables); i++) { 
     tables.add(new Table()); 
    }   
    adapter = new MyTableAdapter(Activity_Table.this, tables); 

    gridView.setAdapter(adapter); 

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      startActivity(new Intent(getApplicationContext(), MyOrderMainActivity.class)); 
     } 
    }); 
} 

EDIT

Я добавил этот кусок кода для моего адаптера, с целью:

public MyTableAdapter(Context mContext, ArrayList<Table> tables, String area_name, String numTables) { 
     this.mContext = mContext; 
     this.tables = tables; 
     this.area_name = area_name; 
     this.numTables = numTables; 

     inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

И я получаю эту ошибку:

Error:(43, 19) error: no suitable constructor found for MyTableAdapter(Activity_Table,ArrayList) constructor MyTableAdapter.MyTableAdapter(Context,ArrayList,String,String) is not applicable (actual and formal argument lists differ in length) constructor MyTableAdapter.MyTableAdapter(Activity_Table) is not applicable (actual and formal argument lists differ in length)

+0

где ваши объекты массива инициализированы? И где ваш вызов класса адаптера? Вы получаете это исключение, потому что ваш список массивов пуст? Отправьте класс, в котором вы инициализировали и вызывают адаптеры. – Ritesh

+0

@Ritesh Я разместил его, пожалуйста, проверьте его –

+0

okay Я отправил кусок кода, где вы хранили пустой объект? Можете ли вы также опубликовать код, в котором вы инициализируете область? – Ritesh

ответ

1

Ваше приложение аварий, потому что вы пытаетесь извлечь данные из areas ArrayList без инстанцировании его. Поэтому нет данных для приложения для извлечения, следовательно, ошибки.

Убедитесь, что areas ArrayList имеет действительные данные, например, путем подачи вашего адаптера с копией вашего areas списка в его конструкторе:

public MyTableAdapter(Context mContext, ArrayList<Table> tables, ArrayList<Area> areas) { 
    this.mContext = mContext; 
    this.tables = tables; 
    this.areas = areas; 

    inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
+0

Это уже сделано, я не публиковал его, но уже получил его в своем адаптере. –

+0

У вас все еще такая же ошибка? Если вы изменили свой адаптер, как вы сказали, он должен работать, или вы должны получить другую ошибку. –

+0

Ошибка: (42, 19) Ошибка: нет подходящего конструктора найдено для MyTableAdapter (Activity_Table, ArrayList

) конструктора MyTableAdapter.MyTableAdapter (контекст, ArrayList
, ArrayList ) не применяется (фактические и формальные списки аргументов различаются по длине) конструктор MyTableAdapter.MyTableAdapter (Activity_Table) не применим (списки фактических и формальных аргументов различаются по длине) –

0

Заканчивать эту часть кода.

for (int i = 0; i < Integer.parseInt(numTables); i++) { 
     //What are you adding here.. an empty table object? 
     tables.add(new Table()); 
    }   
    adapter = new MyTableAdapter(Activity_Table.this, tables); 
+0

Это цикл для подсчета количества таблиц. Я отправил больше кода с ошибкой, которую я получаю. –

0

Поскольку вы не разместили свой полный код, я предполагаю, что вы используете два разных вида деятельности. Один использует MyAreaAdapter, а другой использует MyTableAdapter, поэтому назовем их MyAreaActivity и MyTableActivity. С этим я понимаю, что вам действительно не нужны все области в MyTableActivity.Я думаю, что вы должны передать имя и номер таблиц в намерениях используется для запуска MyTableActivity из MyAreaActivity:

Intent i = new Intent(this, MyTableActivity.class); 
i.putExtra("area_name", area.getName()); 
i.putExtra("area_tables", area.getNumOFTables()); 
startActivity(i); 

Тогда, в MyTableActivity:

Intent intent = getIntent(); 
String area_name = intent.getExtras().getString("area_name"); 
int area_tables = intent.getExtras().getInt("area_tables"); 

И передать его MyTableAdapter:

String area_name; 
int area_tables 

public MyTableAdapter(Context mContext, ArrayList<Table> tables, String area_name, int area_tables) { 
    this.mContext = mContext; 
    this.tables = tables; 
    this.area_name = area_name; 
this.area_tables = area_tables; 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    TextView textView; 
    ImageView imageView; 


    if (convertView == null){ 
     convertView = inflater.inflate(R.layout.imageview_table_layout, null); 
    } 

    ImageView tableImageView = (ImageView) convertView.findViewById(R.id.tableImageView); 
    TextView tableName = (TextView) convertView.findViewById(R.id.tableName); 

    tableName.setText(area_name + " " + area_tables); 

    return convertView; 
} 

Если вам нужна дополнительная информация в этом районе, вы можете передать весь объект, используя Serializable o r Parcelable.

Если это не ваша проблема, пожалуйста, сообщите нам более подробную информацию и опубликуйте обновленный код. В противном случае вам будет сложно помочь.

+0

я получаю эту ошибку: Ошибка: (43, 19) Ошибка: нет подходящего конструктора найдено для MyTableAdapter (Activity_Table, ArrayList

) конструктор MyTableAdapter.MyTableAdapter (контекст, ArrayList
, String, String) не применяется (фактические и формальные списки аргументов различаются по длине) конструктор MyTableAdapter.MyTableAdapter (Activity_Table) не применим (списки фактических и формальных аргументов различаются по длине) –

Смежные вопросы