2016-05-24 3 views
0

Я делаю приложение с другом, и мы как бы застряли. У меня alredy удается иметь несколько строк LisView и ive сделал для него пользовательский адаптер. Что это приложение делает, это зарегистрировать автомобиль из другого вида деятельности, и когда нажата кнопка «Отправить», мы хотим добавить 3 элемента из машины в список ListView, который у нас есть в Tabbed Activity. Я попробовал несколько вещей с Intent и Bundle, чтобы получить информацию, а затем вставить ее, но она дает нулевую ошибку.Добавление элементов в многострочный ListView динамически из другого вида деятельности

Это мой проект недо Сейчас:

MainActivity:

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 

public class MainActivity extends AppCompatActivity { 



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

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(MainActivity.this, CarType.class); 
      MainActivity.this.startActivity(intent); 


     } 
    }); 

    // Get the ViewPager and set it's PagerAdapter so that it can display items 
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
    viewPager.setAdapter(new SampleFragmentPageAdapter(getSupportFragmentManager(), 
      MainActivity.this)); 

    // Give the TabLayout the ViewPager 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs); 
    tabLayout.setupWithViewPager(viewPager); 

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      Fragment fragment = null; 
      if(tab.getPosition()==0) { 

       PageFragment pageFragment = new PageFragment(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.container, pageFragment).commit(); 
      } 
      if(tab.getPosition()==1){ 
       SecondPageFragment secondPageFragment = new SecondPageFragment(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.container,secondPageFragment).commit(); 

      } 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 
} 

} 

Page Fragment:

import android.os.Bundle; 
import android.support.v4.app.ListFragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 

public class PageFragment extends ListFragment { 

String[] cars ; 
String[] modelo ; 
String[] placas ; 


public static final String ARG_PAGE = "ARG_PAGE"; 

private int mPage; 

public static PageFragment newInstance(int page) { 
    Bundle args = new Bundle(); 
    args.putInt(ARG_PAGE, page); 
    PageFragment fragment = new PageFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 


public PageFragment() { 


} 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


} 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Bundle intent = getActivity().getIntent().getExtras(); 



     cars = new String[]{intent.getString("marca")}; 
     modelo = new String[]{intent.getString("modelo")}; 
     placas = new String[]{intent.getString("placas")}; 



    View view = inflater.inflate(R.layout.activity_page_fragment, container, false); 
    Adapter adapter = new Adapter(getActivity(), cars, modelo, placas); 
    ListView listView = (ListView) view.findViewById(android.R.id.list); 
    listView.setAdapter(adapter); 

    return view; 
} 
} 

адаптер:

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 


public class Adapter extends ArrayAdapter<String> { 

String [] cars ; 
String [] modelo ; 
String [] placas ; 
Context c; 
LayoutInflater inflater; 


public Adapter(Context context, String[] cars, String[] modelo, String[] placas){ 
    super(context, R.layout.single_row, cars); 

    this.c=context; 
    this.cars=cars; 
    this.modelo=modelo; 
    this.placas=placas; 



} 

public class ViewHolder{ 
    TextView cars; 
    TextView model; 
    TextView placas; 


} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if(convertView == null){ 

     inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView=inflater.inflate(R.layout.single_row,null); 

    } 

    final ViewHolder holder = new ViewHolder(); 
    holder.cars=(TextView)convertView.findViewById(R.id.textView2); 
    holder.model=(TextView)convertView.findViewById(R.id.textView3); 
    holder.placas=(TextView)convertView.findViewById(R.id.textView4); 

    holder.cars.setText(cars[position]); 

    holder.model.setText(modelo[position]); 
    holder.placas.setText(placas[position]); 

    return convertView; 
} 
} 

CarType: это форма, которую я хочу, чтобы получить информацию в виде списка

import android.app.AlertDialog; 
import android.content.Intent; 
import android.graphics.drawable.Drawable; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.*; 

import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.File; 

public class CarType extends AppCompatActivity { 

ImageButton androidImageButton; 
ImageView imageView; 
static final int CAM_REQUEST = 1; 



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

    final EditText etMarca = (EditText)findViewById(R.id.etMarca); 
    final EditText etModelo = (EditText)findViewById(R.id.etModelo); 
    final EditText etPlacas = (EditText)findViewById(R.id.etPlacas); 
    final EditText etColor = (EditText)findViewById(R.id.etColor); 
    final CheckBox cbCamioneta = (CheckBox)findViewById(R.id.cbCamioneta); 
    final CheckBox cbCar = (CheckBox)findViewById(R.id.cbCar); 
    final boolean checkStatus = cbCamioneta.isChecked(); 



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


    assert bSubmit != null; 
    bSubmit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent intent = new Intent(getApplicationContext(), Adapter.class); 
      intent.putExtra("marca", etMarca.getText().toString()); 
      intent.putExtra("modelo", etModelo.getText().toString()); 
      intent.putExtra("placas", etPlacas.getText().toString()); 
      intent.putExtra("color", etColor.getText().toString()); 
      intent.putExtra("camioneta", cbCamioneta.getText().toString()); 
      intent.putExtra("car", cbCar.getText().toString()); 
      intent.putExtra("checkboxstatus", checkStatus); 

      startActivity(intent); 


      final String modelo = etModelo.getText().toString(); 
      final String marca = etMarca.getText().toString(); 
      final String placas = etPlacas.getText().toString(); 
      final String color = etColor.getText().toString(); 

      Response.Listener<String> responseListener = new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        try { 
         JSONObject jsonResponse = new JSONObject(response); 
         boolean success = jsonResponse.getBoolean("success"); 
         if (success) { 
          Intent intent = new Intent(CarType.this, MainActivity.class); 
          CarType.this.startActivity(intent); 
         } else { 
          AlertDialog.Builder builder = new AlertDialog.Builder(CarType.this); 
          builder.setMessage("Register Failed") 
            .setNegativeButton("Retry", null) 
            .create() 
            .show(); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }; 

      CarRegisterRequest carregisterRequest = new CarRegisterRequest(marca, modelo, placas, color, responseListener); 
      RequestQueue queue = Volley.newRequestQueue(CarType.this); 
      queue.add(carregisterRequest); 

     } 
    }); 

    androidImageButton = (ImageButton) findViewById(R.id.image_button_android); 
    imageView = (ImageView) findViewById(R.id.Final_picture); 
    androidImageButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      File file = getFile(); 
      camera_intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 
      startActivityForResult(camera_intent, CAM_REQUEST); 
     } 
    }); 
} 



private File getFile(){ 
    File folder = new File ("sdcard/camera_app"); 

    if (!folder.exists()){ 
     folder.mkdir(); 
    } 
    File image_file = new File(folder, "cam_image.jpg"); 
    return image_file; 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    String path = "sdcard/camera_app/cam_image.jpg"; 
    imageView.setImageDrawable(Drawable.createFromPath(path)); 
} 

} 

После этого у меня есть файл XML для моей страницы фрагмента, который только включает в себя ListView и я есть «single_row.xml», который является форматом, который является многострочным ListView.

Любая помощь будет очень оценена, я совершенно новичок в Android и на этом сайте, поэтому прошу прощения, если я не получу прямой ответ.

спасибо.

+0

Вы обеспечите журнал ошибок также обновить код с соответствующим номером строки – Alok

+0

Вы можете передать самому объект в parcelable с помощью пучка , или вы можете сохранить его в базе данных и в новом действии, прочитав все это из db, SugarORM - это простая БД для реализации. Вы также можете использовать шаблон master-detail (у студии андроида есть его по умолчанию), используя фрагменты, и таким образом в рамках одной активности вы можете обменивать фрагменты и сделать их похожими на два разных вида деятельности. –

ответ

0

Это довольно легко, как деятельность общения в андроида

Вы должны startActivityForResult(intent, requestCode) из MainActivity, как только вы начали свою деятельность за результат, вам нужно будет ждать результата в одной и той же деятельности (MainActivity), и вы получите результат в вашем onActivityResult(int requestCode, int resultCode, Intent data) вместе со всеми данными в этом намерении.

public class MainActivity extends AppCompatActivity { 

    private static final int RQ_CAR = 1; 
    .... 


     .... 
     // Open the second activity 
     Intent intent = new Intent(MainActivity.this, CarType.class); 
     startActivityForResult(intent, RQ_CAR); 
     .... 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode == RQ_CAR && resultCode == Activity.RESULT_OK) { 
      Bundle bundle = data.getExtras(); 
      // Extract data and do whatever you want 
     } 
    } 

} 

но где я могу назначить Bundle в намерении и установить, что resultCode будет в порядке?

В вашей второй деятельности (CarType), вам нужно будет сделать это вручную

Intent intent = new Intent(); 
Bundle extras = new Bundle(); 
extras.put....(); // put all your data here 
intent.putExtras(extras); 
setResult(Activity.RESULT_OK, intent); 
+0

Ждём попробовать, откликнитесь! –

+0

Не должна ли я первая часть кода в фрагменте? или MainActivity в порядке? –

+0

Всё зависит от меня. Кто начнет и получит результат? –

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