2016-01-17 14 views
-5

У меня есть основное действие с ListView. Затем у меня есть второе действие с текстовым полем для ввода пользователя и кнопкой. Когда пользователь вводит вход и нажимает на кнопку, он должен добавить элемент в ListView в основной активности, но по какой-то причине ListView не обновляется новыми данными. Любая идея о том, как это сделать?ListView Refresh в Android

+2

Пробовали ли вы искать? Проверьте это http://stackoverflow.com/questions/2250770/how-to-refresh-android-listview?rq=1 –

+0

У меня есть полный пример, который должен ответить на этот вопрос: http://stackoverflow.com/questions/34637554/send-data-from-a-second-activity-to-the-first-one-doesnt-work-android/34640796 # 34640796 –

+0

вы также можете проверить код на github, а также https://github.com/pankajnimgade/ Учебник/blob/master/app/src/main/java/activities/list/first/NoteListActivity.java –

ответ

0
Create an adapter class for your listView. 

class MyAdapter extends BaseAdapter { 
ArrayList<Item> items; 

// Override all other needed methods. 

//Add method to add items to list from outside. 

public void addItems(Item item) { 
items.add(item); 
adapter.notifyDataSetChanged(); 
} 


} 

Внутри вашей деятельности // Crate MyAdapter например правопреемником в ListView как-

listView,setAdapter(adapter); 

Item item= new Item(); 

// Добавить необходимые свойства в п. и добавить элемент в список.

adapter.addItem(item); 

Это общая идея. Осмотритесь. Должно сработать.

+0

Спасибо за это Крис. Могу ли я не просто сделать это ... – user3596206

+0

public void addOccasion (View view) { Intent intent = new Intent (getApplicationContext(), New.class); startActivityForResult (намерение, 33); } @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult (requestCode, resultCode, data); if (requestCode == 33 && resultCode == RESULT_OK) { адаптер.notifyDataSetChanged(); } }, а затем во втором действии: Intent i = getIntent(); i.putExtra («данные», «что-то»); setResult (RESULT_OK, i); finish(); – user3596206

+0

Вы можете это сделать, но изменение содержимого списка важно, поэтому вы должны сначала обновить данные listadapter n, а затем изменить тип данных извещателя. иначе работать не будет. – Krishna

0

Ваша вторая активность B, не может видеть свой ресурс данных в деятельности в, поэтому, когда вы добавляете новый элемент в деятельности B вы должны уведомить активность

, что произошло изменение. Это можно получить с помощью broadcastreceive. Когда вы добавляете элемент в действие B sendBroadcastreceive к активности A. Деятельность A получает изменение, добавляя его в dataresource и только после уведомления вашего адаптера.

См. Пример ниже. это работает!

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    static String[] bike = new String[]{ 
      "Ducati", "Honda", "BMW", "Bimota", "Kawasaky", "Yahamaha", "Suzuky", "Harlay-Davinson", 
      "Fantic", "Morini", "Hasquarna", "Aprilia", "Guzzi", "Beta", "Borile", "Buell", "Kymco", "Ktm" 

    }; 

    ArrayList<String> alBike = new ArrayList<>(Arrays.asList(bike)); 

    private ArrayAdapter adapter ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ListView listView = (ListView) findViewById(R.id.listView); 
     Button button = (Button) findViewById(R.id.button2); 

     adapter = new myadapter(getBaseContext(),0); 
     listView.setAdapter(adapter); 

     IntentFilter intentFilter =new IntentFilter(); 
     intentFilter.addAction("ITEM_ADDED"); 

     BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       String action = intent.getAction(); 

       // Log.i("bogo",action); 
       switch (action) { 
        case "ITEM_ADDED": 

         String newitem = intent.getStringExtra("newitem"); 
         alBike.add(newitem); 
         adapter.notifyDataSetChanged(); 
         break; 

       } 
      } 

     }; 
     registerReceiver(broadcastReceiver, intentFilter); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(getApplicationContext(),FormActivity.class)); 
     } 
    }); 



    } 

    public class myadapter extends ArrayAdapter<String> { 

     public myadapter(Context context, int resource) { 
      super(context, resource); 
     } 

     @Override 
     public int getCount() { 
      return alBike.size(); 
     } 



     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View row = inflater.inflate(R.layout.listviewrow, parent, false); 
      TextView textView = (TextView) row.findViewById(R.id.textView); 
      textView.setText(alBike.get(position)); 

      return row; 
     } 
    } 
} 

main_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    tools:context="bogo.com.additemtolistview.MainActivity"> 

    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="new item" 
     android:id="@+id/button2" 
     android:layout_above="@+id/listView" 
     android:layout_alignParentEnd="true" 
     android:layout_marginEnd="198dp" /> 
    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/listView" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentTop="true" /> 


</LinearLayout> 

FormActivity.java (ВАШ АКТИВНОСТЬ Б)

package bogo.com.additemtolistview; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.text.Editable; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class FormActivity extends AppCompatActivity { 

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

     Button button = (Button) findViewById(R.id.button); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       EditText editText = (EditText) findViewById(R.id.editText); 
       String newitem = editText.getText().toString(); 

       Intent intent = new Intent("ITEM_ADDED"); 
       intent.putExtra("newitem",newitem); 
       sendBroadcast(intent); 
       finish(); 
      } 
     }); 

    } 
} 

activity_form.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="bogo.com.additemtolistview.FormActivity"> 

    <EditText 
     android:layout_width="220dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/editText" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginStart="78dp" 
     android:layout_marginTop="60dp" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/button" 
     android:layout_centerVertical="true" 
     android:layout_alignStart="@+id/editText" /> 
</RelativeLayout> 

listviewrow.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="48dp"> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="New Text" 
      android:textColor="@android:color/black" 
      android:id="@+id/textView" /> 
    </LinearLayout> 

</LinearLayout> 
+0

Спасибо, что Богоджоб. Только один вопрос, для чего на самом деле мы использовали listviewrow.xml? – user3596206

+0

Я использовал listviewrow.xml. он содержит LinearLayout и простой TextView. В любом случае, любой listviewrow вы хотите использовать концепцию и то же самое. Вы видите listviewrow.xml – Bogojob

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

  • Нет связанных вопросов^_^