2013-03-03 2 views
0

У меня есть listview выборка данных из SqLite Db. Мне нужно получить данные, которые щелкнуты в списке, и показать их в другом действии в списке.Передача данных из ListView в другой Listview

Я пробовал использовать общие настройки, но я мог получать только данные за один раз и отображать их в другом виде в виде текстового представления.

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

мой розыскная деятельность

listContent1.setAdapter(cursorAdapter); 
    listContent1.setOnItemClickListener(listContentOnItemClickListener); 



      private ListView.OnItemClickListener listContentOnItemClickListener = new ListView.OnItemClickListener(){ 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 

     Cursor cursor = (Cursor) parent.getItemAtPosition(position); 

     String item_content1 = cursor.getString(cursor.getColumnIndex(SQLiteAdapter.KEY_FOODNAME)); 
     String item_content2 = cursor.getString(cursor.getColumnIndex(SQLiteAdapter.KEY_CALORIES)); 
     arlene = arlene + Integer.parseInt(item_content2); 
     String item = String.valueOf(" Food Name: " + item_content1) + "\n" + 
       " Calories: " + item_content2; 

     Toast.makeText(Search.this, item, Toast.LENGTH_LONG).show();  

     food.setText(item_content1); 
     calories.setText(String.valueOf(arlene)); 


     Intent myIntent = new Intent(Search.this, Foodlog.class); 
     Bundle bundle = new Bundle(); 
     bundle.putString("SQLITEDATA1", food.getText().toString()); 
     bundle.putString("SQLITEDATA2", calories.getText().toString()); 
     myIntent.putExtras(bundle); 
     startActivity(myIntent); 
    } 

вот моя foodlog активность

public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.foodlog); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    foodnum = (TextView)findViewById(R.id.foodNum); 
    remaining = (TextView)findViewById(R.id.remainingNum); 
    totalnum = (TextView)findViewById(R.id.totalNum); 
    foodlog = (ListView)findViewById(R.id.list); 

     Bundle bundle = getIntent().getExtras(); 
     if(bundle != null){ 
     String food = bundle.getString("SQLITEDATA1"); 
     String calories = bundle.getString("SQLITEDATA2"); 

     String[] values = new String[] { food, calories }; //That you got from your intent bundle 
     LVAdapter adapter = new LVAdapter(this, R.layout.foodlist, values); 
     setListAdapter(adapter); 

     } 

надеюсь, что вы можете помочь мне

03-04 23:40:18.572: E/AndroidRuntime(451): FATAL EXCEPTION: main 
03-04 23:40:18.572: E/AndroidRuntime(451): java.lang.RuntimeException: Unable to  start activity ComponentInfo{me.mojica.caloriewatch/me.mojica.caloriewatch.Foodlog}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 
03-04 23:40:18.572: E/AndroidRuntime(451): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
03-04 23:40:18.572: E/AndroidRuntime(451): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
03-04 23:40:18.572: E/AndroidRuntime(451): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
03-04 23:40:18.572: E/AndroidRuntime(451): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
03-04 23:40:18.572: E/AndroidRuntime(451): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-04 23:40:18.572: E/AndroidRuntime(451): at android.os.Looper.loop(Looper.java:123) 
03-04 23:40:18.572: E/AndroidRuntime(451): at android.app.ActivityThread.main(ActivityThread.java:4627) 
03-04 23:40:18.572: E/AndroidRuntime(451): at java.lang.reflect.Method.invokeNative(Native Method) 
03-04 23:40:18.572: E/AndroidRuntime(451): at java.lang.reflect.Method.invoke(Method.java:521) 
03-04 23:40:18.572: E/AndroidRuntime(451): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
03-04 23:40:18.572: E/AndroidRuntime(451): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
03-04 23:40:18.572: E/AndroidRuntime(451): at dalvik.system.NativeStart.main(Native Method) 
03-04 23:40:18.572: E/AndroidRuntime(451): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 
03-04 23:40:18.572: E/AndroidRuntime(451): at android.app.ListActivity.onContentChanged(ListActivity.java:245) 
03-04 23:40:18.572: E/AndroidRuntime(451): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:201) 
03-04 23:40:18.572: E/AndroidRuntime(451): at android.app.Activity.setContentView(Activity.java:1647) 
03-04 23:40:18.572: E/AndroidRuntime(451): at me.mojica.caloriewatch.Foodlog.onCreate(Foodlog.java:22) 
03-04 23:40:18.572: E/AndroidRuntime(451): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
03-04 23:40:18.572: E/AndroidRuntime(451): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

я отредактировали на основе ответов. все еще я не могу заставить его работать. Помоги пожалуйста.

+0

Прикрепите «Bundle» с «Intent» для второго действия. –

+0

ive попробовал это, но как я могу создать список из него? пожалуйста помогите. –

+0

Я помогу вам, вы сначала опуститесь вниз, где ваша проблема? –

ответ

1

Вы передаете дополнительный комплект с данными для следующего действия с использованием намерения, когда вы нажимаете элемент ListView.

Intent myIntent = new Intent(currentActivity.this, secondActivity.class); 
myIntent.putExtra("SQLITEDATA1", food.getText().toString()); 
myIntent.putExtra("SQLITEDATA2", calories.getText().toString()); 
startActivity(myIntent); 

Используя эти данные, вы должны заполнить ListView, создав собственный адаптер ListView.

public class SimpleArrayAdapter extends ArrayAdapter<String> { 
    private final Context context; 
    private final String[] values; 

    public SimpleArrayAdapter(Context context, String[] values) { 
    super(context, R.layout.rowlayout, values); 
    this.context = context; 
    this.values = values; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(R.layout.rowlayout, parent, false); 
    TextView textView = (TextView) rowView.findViewById(R.id.label);   
    textView.setText(values[position]);  
    return rowView; 
    } 
} 

Чтобы заполнить ListView в Вашей другой деятельности:

public class MyListActivity extends ListActivity { 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    String food = myIntent.getStringExtra("SQLITEDATA1"); 
    String calories = myIntent.getStringExtra("SQLITEDATA2"); 
    String[] values = new String[] { food, calories }; //That you got from your intent bundle 
    SimpleArrayAdapter adapter = new SimpleArrayAdapter(this, values); 
    setListAdapter(adapter); 
    } 

} 

Я рекомендую reading this entire tutorial.

+0

какие данные я передам в намерении сэр? Мне очень жаль. im super new to thiw и является ли адаптер listview в моем первом классе или я сделаю еще один для этого? –

+0

@ michelle.mo Похоже, что вы сохраняете данные с щелчком в разделе «Общие предпочтения», а затем снова читаете его в следующем действии. Если вы так используете Intent. –

+0

в порядке сэр. Спасибо. я попробую это. большое спасибо. –

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