2016-03-20 3 views
1

Ich habe zwei ListView s in einer Aktivität. Ich möchte den Wert des ausgewählten Elements von der ersten auf die zweite ListView über eine Button s onClick() übertragen. Bitte beachten Sie meine Codes unten.Wie wird der ausgewählte Wert des ersten ListView auf den zweiten ListView übertragen?

activity.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/linearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.edkul.vimal.edkul.Library"> 

    <TextView 
     android:id="@+id/textView27" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:text="Library" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textSize="25sp" /> 


    <LinearLayout 
     android:id="@+id/linearLayout2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView27" 
     android:layout_marginTop="35dp" 
     android:orientation="horizontal" 
     android:weightSum="2"> 

     <ListView 
      android:id="@+id/list_item1" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:layout_weight="1" 
      android:background="#88FF0000" 
      android:padding="3dp"> 

     </ListView> 

     <LinearLayout 
      android:id="@+id/linearLayout3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:gravity="center_vertical|center_horizontal" 
      android:orientation="vertical" 
      android:padding="3dp" 
      android:weightSum="2"> 

      <Button 
       android:id="@+id/nextButton" 
       android:layout_width="50dp" 
       android:layout_height="50dp" 
       android:layout_alignParentBottom="true" 
       android:layout_centerHorizontal="true" 
       android:layout_weight="1" 
       android:background="@drawable/circular_button" 
       android:drawableTop="@android:drawable/ic_media_next" /> 

      <Button 
       android:id="@+id/previousButton" 
       android:layout_width="50dp" 
       android:layout_height="50dp" 
       android:layout_alignParentBottom="true" 
       android:layout_centerHorizontal="true" 
       android:layout_marginTop="10dp" 
       android:layout_weight="1" 
       android:background="@drawable/circular_button" 
       android:drawableTop="@android:drawable/ic_media_previous" /> 
     </LinearLayout> 

     <ListView 
      android:id="@+id/list_item3" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:layout_weight="1" /> 
    </LinearLayout> 

</RelativeLayout> 

Aktivität:

package com.edkul.vimal.edkul; 

import android.app.Activity; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v4.content.ContextCompat; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 

public class Library extends Activity { 

    String[] mobileArray = {"Android","IPhone","WindowsMobile","Blackberry","WebOS","Ubuntu","Windows7","Max OS X"}; 

    Button btn1,btn2; 
    ArrayAdapter adapter1,adapter2; 
    String[] data; 
    ListView listView1,listView2; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_library); 

     listView1 = (ListView) findViewById(R.id.list_item1); 
     listView2 = (ListView) findViewById(R.id.list_item3); 

     adapter1 = new ArrayAdapter<String>(this, R.layout.activity_listview, mobileArray); 
     listView1.setAdapter(adapter1); 

     listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) { 
       String selectedFromList = (String) (listView1.getItemAtPosition(myItemInt)); 
       Log.v("Print Here", selectedFromList.toString()); 
       data[0] = selectedFromList.toString(); 
       adapter2 = new ArrayAdapter<String>(this, R.layout.activity_listview, data[0]); 
      } 
     }); 

     btn1 = (Button) findViewById(R.id.nextButton); 
     btn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       listView2.setAdapter(adapter2); 
      } 
     }); 
    } 

} 

Please refer the image for more explanation.

Antwort

1

wie bereits.

listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) { 
       String clickedItem = mobileArray[postion]; 
       if(!arrayData.contains(clickedItem)) 
       arrayData.add(clickedItem); 
       String[] newitem = new String[arrayData.size()]; 
       arrayData.toArray(newitem); 
       adapter2 = new ArrayAdapter<String>(Library.this, android.R.layout.simple_list_item_1,android.R.id.text1, newitem); 
      } 
     }); 

Hier arrayData ist Ihre Liste Array es global definieren.

List<String> arrayData = new ArrayList<String>(); 

Dann setzen Sie auf die Schaltfläche klicken, um die Adapter.

 btn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       listView2.setAdapter(adapter2); 
      } 
     }); 

hoffe, dies wird Ihnen helfen, Ihr Problem zu lösen.

+0

Was wäre der Wert der Position möglicherweise, dass dumme Frage ist, aber bitte helfen Sie mir. Und ich bekomme Fehler in Adapter2 = neuer ArrayAdapter (dies, android.R.layout.simple_list_item_1, android.R.id .text1, newitem); Kann den Konstruktor nicht auflösen. –

+0

@vimalishra Position ist Ihre myItemInt Variable Ersetzen Sie sie mit ihrer Position. –

+0

@vimalishra Haben Sie diese Änderung in Ihrem Code überprüft? –

1

Okay. Ich verstehe, welches Verhalten Sie anstreben, also habe ich Ihren Code geändert. Hier ist, was ich habe nach:

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 

import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

    String[] mobileArray = {"Android", "IPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X"}; 
    List<String> mobileArray2 = new ArrayList<String>(); 
    String selectedText; 

    Button btn1, btn2; 
    ArrayAdapter adapter1, adapter2; 
    String[] data; 
    ListView listView1, listView2; 

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

     // Initialize stuff.. 
     listView1 = (ListView) findViewById(R.id.list_item1); 
     listView2 = (ListView) findViewById(R.id.list_item3); 
     btn1 = (Button) findViewById(R.id.nextButton); 

     adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mobileArray); 
     adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mobileArray2); 

     listView1.setAdapter(adapter1); 
     listView2.setAdapter(adapter2); 

     // Set set item click listener for first listview.. 
     listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) { 
       selectedText = (String) (listView1.getItemAtPosition(myItemInt)); 
       Log.v("Print Here", selectedText); 
      } 
     }); 

     // set click listener for button 1.. 
     btn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       sendToOtherListView(selectedText, listView2); 
      } 
     }); 
    } 

    // function that accepts the string to transfer and the listview to where it will be transferred. 
    private void sendToOtherListView(String strToTransfer, ListView lvDestination) { 
     // gets the adapter of the destination listview.. 
     ArrayAdapter<String> adapter = (ArrayAdapter<String>) lvDestination.getAdapter(); 

     // adds the string to transfer to the destination listview adapter. 
     adapter.add(strToTransfer); 
    } 

} 

Es ist nur grundlegende Codes. Nicht vollständig optimiert und alles, nur etwas, was Sie als Leitfaden verwenden können.

Zwei Spitzen (diese Tipps sind genau das, was Ich denke und was ich Säge, die hinzugefügt werden fehlten oder die sich von Best Practices abweichen können, sollten Sie weiterhin über sie suchen):

  1. ich denke, es ist viel einfacher, List<String> zu verwenden, anstatt die String[] zum Gießen Gründen (dies ist diejenige, die ich mich beziehe, wo ich bin nicht sicher, ob eine bewährte Methode ist, genau so, wie ich es sehe).

  2. Fügen Sie Nullprüfer hinzu, um NPE zu vermeiden.

So ziemlich alles ist in Ordnung, denkt man muss nur mehr auf der Datenmanipulation üben .. wie zum Beispiel in Ihrem Code für setOnItemClickListener Sie das ausgewählte Element abgerufen, es in einem String[] gespeichert und eingestellt zu adapter2 als sein Wert, aber setzen Sie nur den Adapter für die 2. ListView, wenn Knopf geklickt wird. Einfacher ist wie in dem Beispiel-Code, den ich zur Verfügung gestellt habe, speichern Sie den ausgewählten Artikel Text auf eine String-Variable, dann nur einmal auf die Schaltfläche klicken, tun Sie die Übertragung (Einstellung des Adapters/Hinzufügen des Wertes zum Adapter), so weniger unnötige Aktion ist getan.

Weitere Informationen zu ListView s finden Sie unter here.

Hoffe das hilft dir irgendwie. Viel Glück und gute Programmierung. :)

+0

Danke !!! Es hat funktioniert und wirklich sehr schöne Erklärung. Ich werde weiter an meiner Programmierung arbeiten, um besser zu werden. –

+0

@vimalishra Sie können nur eine richtige Antwort auswählen. Wählen Sie einfach den aus, den Sie für den hilfreichsten halten. Es ist verwirrend, wenn sich unser Ruf ständig ändert (nach oben und nach unten). Weitere Informationen finden Sie unter [Wie eine Antwort akzeptiert wird] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). –

Verwandte Themen