2015-02-27 1 views
0

У меня 2 просмотра в 1 активном (1 слева 1 справа от экрана). Я хочу, чтобы две строки были извлечены из обоих представлений списков и использовали их где-нибудь в коде (либо в той же активности, но в разных классах или разных действиях). Я попытался присвоить кликнутые элементы общедоступной переменной, а затем опубликовать их в текстовом виде, я ничего не вижу. Пожалуйста, помогите или предложите другой лучший способ. Вот пример моего кода:Извлечь 2 строки из 2 списков в adroidstudio

public class Tabs extends Activity {  
String CF =""; //Convert To 
String CT =""; //Convert From 
populateListView(); //function that populates my listview (not shown here) 

ListView listMassFrom = (ListView) findViewById(R.id.ListViewMassFrom); 
ListView listMassTo = (ListView) findViewById(R.id.ListViewMassTo); 

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

      String convFrom = ((TextView) viewClicked).getText().toString(); 
      CF = convFrom; 
     } 
    }); 



listMassTo.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 

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

      String convTo = ((TextView) viewClicked).getText().toString(); 
      CT = convTo; 
     } 
    }); 


//Test to see if the two string were extracted from the onItemClick method: 
    TextView t1 = (TextView) findViewById(R.id.test1); 
    t1.setText(CT); 

    TextView t2 = (TextView) findViewById(R.id.test2); 
    t2.setText(CF); 
    } 
} 
+0

Вызов 't1.setText (CT);' и 't.setText (CF);' inside' onItemClick' метод –

+0

Спасибо за ответ, но я хочу, чтобы иметь возможность использовать CT и CF строки вне onItemClick. Набор.Text - это просто, чтобы проверить, было ли значение извлечено из onItemClick или нет. –

ответ

0

Вы должны получить доступ к элементам с помощью адаптеров с помощью параметра position.

Предположив адаптер содержит Strings (В противном случае адаптировать его к вашей модели данных): тестирование

Пример и работы:

public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) { 
    CF = <listMassFrom_adapter>.getItem(position); 
} 

EDIT. Вы можете увидеть тост при выборе предметов.

package com.example; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.example.testbutton.R; 

public class Tabs extends Activity { 
    final static String[] MassUnits = { "kg", "g", "mg", "lb", "lbm", "slug" }; 
    String CF = ""; // Convert To 
    String CT = ""; // Convert From 
    ListView listMassFrom, listMassTo; 
    ListAdapter adapterFrom, adapterTo; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tabs); 

     // Find views 
     listMassFrom = (ListView) findViewById(R.id.lvFrom); 
     listMassTo = (ListView) findViewById(R.id.lvTo); 

     // Create list of items 
     adapterFrom = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, MassUnits); 
     listMassFrom.setAdapter(adapterFrom); 

     adapterTo = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, MassUnits); 
     listMassTo.setAdapter(adapterTo); 

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

        String convFrom = (String) adapterFrom 
          .getItem(position); 
        Toast.makeText(getApplicationContext(), 
          "From: " + convFrom, Toast.LENGTH_SHORT).show(); 
       } 
      }); 

     listMassTo 
      .setOnItemClickListener(new AdapterView.OnItemClickListener() { 

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

        String convTo = (String) adapterTo.getItem(position); 
        Toast.makeText(getApplicationContext(), 
          "To: " + convTo, Toast.LENGTH_SHORT).show(); 
       } 
      }); 
    } 
} 

Layout tabs.xml:

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

    <ListView 
     android:id="@+id/lvFrom" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

    <ListView 
     android:id="@+id/lvTo" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

</LinearLayout> 

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

+0

Он не может решить listMassFrom_adapter и getItem. Они оба выглядят красными. Я считаю, что адаптер содержит строку. –

+0

Здесь находится populateListView(): –

+0

private void populateListView() { // Создаем список его объектов String [] MassUnits = {"kg", "g", "mg", "lb", "lbm", "slug «}; // Адаптер сборки ArrayAdapter adapter = new ArrayAdapter (это, R.layout.unit_items, MassUnits); ListView listMassFrom = (ListView) findViewById (R.id.ListViewMassFrom); listMassFrom.setAdapter (адаптер); } –

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