Ich versuche, eine einfache Registerkarte Anwendung mit verschiedenen ListViews und Optionen zu machen. Ich möchte die Beziehung zwischen Registerkarten und MainActivity und das Problem im Moment verwalten, kann ich nicht eine AddItem() -Funktion in einer Menüschaltfläche, um ein neues Element zu meiner ListView (innerhalb eines Fragments) in einer Anwendung mit Registerkarten hinzufügen. Ich habe bereits viel gesucht, und ich fand nur über das Hinzufügen eines Elements in einem einfachen ListView (innerhalb MainActivity) oder Hinzufügen von Elementen nicht dynamisch in einer Anwendung mit Registerkarten.ANDROID - Hinzufügen neuer Elemente in einer Fragmentliste (Tabbed) - Android Studio
Also hier ist es der Bildschirm meiner Anwendung mit Registerkarten und der ListView, die ich versuche zu arbeiten. Custom List View Application Picture
Und hier ist mein Code: MainActivity.java
public class MainActivity extends AppCompatActivity {
private SectionsPagerAdapter mSectionsPagerAdapter;
/**
* The {@link ViewPager} that will host the section contents.
*/
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
Das Fragment mit dem Custom, dass ich versuche, die Menü-Taste Methode action_add() zu implementieren:
public class Catalogo extends Fragment {
ArrayList<CustomList> custom = null;
ListView lv = null;
ArrayAdapter adapter = null;
ArrayList<CustomList> elementos = new ArrayList<CustomList>();
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.catalogo, container, false);
ListView lv = rootView.findViewById(R.id.catalogoListView);
custom = addItems();
adapter = new CustomAdapter(this.getContext(), custom);
lv.setAdapter(adapter);
return rootView;
}
private ArrayList<CustomList> addItems(){
CustomList custom = new CustomList("Banana", "4.0");
elementos.add(custom);
custom = new CustomList("Morango", "5.0");
elementos.add(custom);
return elementos;
}
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_add){
AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
//builder.setTitle("Adicionar novo item"); //THESE ARE NOT WORKING
//final EditText input = new EditText(this); //THIS SHOULD BE 2 Text Fields
//builder.setView(input);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//NEED TO IMPLEMENT HERE
}
});
builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
return true;
}
return super.onOptionsItemSelected(item);
}
public static String preferredCase(String original, String price)
{
if (original.isEmpty())
return original;
return original.substring(0, 1).toUpperCase() + original.substring(1).toLowerCase();
}
}
Meine CustomItem Struktur:
public class CustomList {
String name;
String price;
public CustomList(String name, String price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public String getPrice() {
return price;
}
}
Und am Ende, mein CustomAdapter:
public class CustomAdapter extends ArrayAdapter<CustomList> {
private final Context context;
private final ArrayList<CustomList> elementos;
public CustomAdapter(Context context, ArrayList<CustomList> elementos){
super(context, R.layout.modelolista, elementos);
this.context = context;
this.elementos = elementos;
}
public View getView(int position, View convertView, ViewGroup parent){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.modelolista, parent, false);
TextView nameItem = rowView.findViewById(R.id.tvName);
TextView priceItem = rowView.findViewById(R.id.tvPrice);
nameItem.setText(elementos.get(position).getName());
priceItem.setText(elementos.get(position).getPrice());
return rowView;
}
}
Sorry, aber ich habe es nicht verstanden .. Sie möchten ein Element zu einer Liste hinzufügen, indem Sie auf einen Menüeintrag klicken und die Liste dieses Eintrags mitteilen, damit die aktualisierte Liste angezeigt werden kann? –
Ja, Sie haben Recht, fügen Sie einen Eintrag in der Liste durch den Menüpunkt hinzu. Das Problem ist .. Ich implementiere die Liste und den Menüpunkt in der MainActivity ... aber ich kann sie nicht in einem Fragment implementieren. Also, es gibt zwei Optionen .. Erstens, implementieren Sie die CustomList und alle Menü-Schaltflächen in der MainActivity, aber dann weiß ich nicht, wie diese "made Custom List" an das Fragment (in "Catalogo" Registerkarte). Zweitens ist, implementieren Sie alles innerhalb des Fragments (Registerkarte "Catalogo"), aber dann kann ich nicht die Schaltfläche Funktionen wie ich in MainActivity implementieren. –
ok hab ich, nur zu wissen: du siehst den "hinzufügen" button nur wenn das katalogfragment angezeigt wird oder du es immer siehst? –