2016-04-20 2 views
0

У меня есть функция Фрагмента, которую я использую, чтобы сделать панель вкладок. Внутри этого действия я планирую поставить таблицу или ListViews с некоторыми случайными значениями.Android Способы взаимодействия в Фрагменте

Вот мой код:

import com.example.mvaguimaraes.beetrackprov.R; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 
import android.widget.ArrayAdapter; 
import android.widget.Toast; 
import android.widget.TextView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.AdapterView; 


public class Orders extends Fragment { 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.orders, container, false); 

     ListView listView1 = (ListView) findViewById(R.id.listView1); 


     Order[] items = { 
       new Order(1, "Milk", 21.50), 
       new Order(2, "Butter", 15.99), 
       new Order(3, "Yogurt", 14.90), 
       new Order(4, "Toothpaste", 7.99), 
       new Order(5, "Ice Cream", 10.00), 
     }; 

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

     listView1.setAdapter(adapter); 

     listView1.setOnItemClickListener(new OnItemClickListener() { 

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

       String item = ((TextView) view).getText().toString(); 

       Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show(); 

      } 
     }); 

    } 

} 

Проблема заключается в том, что я не могу выразить свою Orders класс фрагментировать и активность, так что я получаю эту ошибку в моем коде:

Не удается разрешить метод findViewByID (ИНТ)

ListView listView1 = (ListView) findViewById(R.id.listView1); 

не удается разрешить конструктор

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

не удается разрешить метод getBaseContext()

Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show(); 

Вероятно потому, что они что-то унаследовать от деятельности. Есть ли способ заставить их работать внутри Фрагмента? Извините за мой нообесс. Я новичок в разработке Android.

Чтобы открыть другой экран после нажатия на одном из пунктов ListView я сделал это право после публичного ничтожного метода onItemClick:

String item = ((TextView) view).getText().toString(); 

       Intent i = new Intent(getApplicationContext(), OrderDetails.class); 
       i.putExtra("new_variable_name",item); 

       Intent browserIntent = 
         new Intent(Orders.this, OrderDetails.class); 

       startActivity(browserIntent); 
       startActivity(i); 

Я попытался заменить как «getApplicationContext()» и «Заказы. это "с" getActivity() ", но это не сработало.

ответ

2

Фрагменты не имеют метода findViewById(), например деятельности. Вместо этого вы вызываете findViewById() в поисковые представления на View, возвращенные с раздувания макета в onCreateView(). Кроме того, если вам нужен Context, вы обычно используете Activity, к которому прикреплен фрагмент, вызывая getActivity().

public class Orders extends Fragment { 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.orders, container, false); 
     ListView listView1 = (ListView) v.findViewById(R.id.listView1); 

     Order[] items = { 
       new Order(1, "Milk", 21.50), 
       new Order(2, "Butter", 15.99), 
       new Order(3, "Yogurt", 14.90), 
       new Order(4, "Toothpaste", 7.99), 
       new Order(5, "Ice Cream", 10.00), 
     }; 

     ArrayAdapter<Order> adapter = new ArrayAdapter<Order>(getActivity(), 
       android.R.layout.simple_list_item_1, items); 

     listView1.setAdapter(adapter); 

     listView1.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, 
            long id) { 
       String item = ((TextView) view).getText().toString(); 
       Toast.makeText(getActivity(), item, Toast.LENGTH_LONG).show(); 
      } 
     }); 

     return v; 
    } 
} 
+2

спасибо! Это сработало отлично! –

+0

Можете ли вы помочь мне с еще одной вещью? После того, как я нажму на элемент из списка, я хочу открыть новый экран/действие и отправить «элемент» на этот экран. Я изменю исходное сообщение с моим кодом. –

+0

Просто изменил исходный вопрос. Не могли бы вы мне помочь? –

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